SQLHelper 简介

什么是SQLHelper

SqlHelper是一个基于.NETFramework的数据库操作组件。组件中包含数据库操作方法,目前SqlHelper有很多版本,主要以微软一开始发布的SqlHelper类,后面包含进了Enterprise Library开源包中了。还有一个主要版本是dbhelper.org开源的sqlhelper组件,优点是简洁,高性能,不仅仅支持sqlserver,同时支持sqlserveroracleaccessMysql数据库,也是一个开源项目,提供免费下载。

SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection,SqlCommand,SqlDataReader等等。SqlHelper封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。

SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。

编辑本段SqlHelper配置项

[1]在应用SqlHelper前最好使用web.config配置连接字符串,这样有利于网站的可移植性和代码的简洁。

<connectionStrings>

<!--SqlServerHelper连接字符串设定-->

<addconnectionString="server=.;uid=sa;pwd=123456;database=yourdatabase"name="SqlServerHelper"/>

编辑本段SqlHelper调用源码

编写SqlHelper调用代码:

SqlHelper支持多种数据库包括MySqlSqlServerOracleAccess数据库,如果的数据库是SqlServer,那么你可以使用SqlServerHelper类,如果是MySql,可以使用MySqlHelper,如果是Access,可以使用AccessHelper。如果是Oracle则可以使用OracleHelper类。

SqlHelper的书写风格很多,你可以选择自己的需求和爱好使用静态方式或对象方式。各和利弊。选择情况使用吧!

第一种,静态方 式,静态方式也是目前应用最多的一种,因为其简单,所以在写一个Sql语句时,用一个方法就可以搞定。如果一个过程需要多个Sql语句执行时,得创建 SqlConnection和控制他的传参,使语句复杂。或者就是每执行一个sql语句让SqlConnection创建一次,使性能受到影响。但是在只 执行一个简单的查询语句时,显的更简单,所以这种方式在简单的执行逻辑面前,受到大家的喜爱!

//查询语句执行:

DataTabledt=SqlServerHelper.ReadTable("select * from table1");

//插入语句执行:

SqlServerHelper.ExecuteNonQuery("insertinto [students] values(@student_name,@class)",

SqlServerHelper.CreateInputParameter("@student_name",SqlDbType.NVarChar, 100, txt_student_name_sqlserver.Text),

SqlServerHelper.CreateInputParameter("@class",SqlDbType.NVarChar, 100, txt_class_sqlserver.Text)

);

简单吧,这让项止显的代码又简单,又清晰!

第二种:面向对象式编程,其实这种语法也不复杂,只是加个using语句而己:

using (SqlServerHelper helper = newSqlServerHelper())

{

helper.Command.CommandText = "deletefrom [Students] where stid=@stid";

helper.AddParameter("@stid",SqlDbType. Int, student_id);

helper.Open();

helper.ExecuteNoneQuery();

helper.Command.Parameters.Clear();

helper.Command.CommandText = "select *from [Students]";return helper.ReadTable();

}

主要成员

SqlHelper类中实现的方法包括:

ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。

ExecuteReader。此方法用于返回SqlDataReader对象,该对象包含由某一命令返回的结果集

ExecuteDataset。此方法返回DataSet对象,该对象包含由某一命令返回的结果集

ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。

ExecuteXmlReader。此方法返回 FORXML查询的 XML片段。

除了这些公共方法外,SqlHelper类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过 SqlCommand 对象来执行。在 SqlCommand对象能够被执行之前,所有参数都必须添加到 Parameters集合中,并且必须正确设置 ConnectionCommandTypeCommandText Transaction属性。SqlHelper类中的专用函数主要用于提供一种一致的方式,以便向 SQL Server数据库发出命令,而不考虑客户端应用程序调用的重载方法实现。SqlHelper 类中的专用实用程序函数包括:

AttachParameters:该函数用于将所有必要的SqlParameter对象连接到正在运行的 SqlCommand

AssignParameterValues:该函数用于为SqlParameter对象赋值。

PrepareCommand:该函数用于对命令的属性(如连接、事务环境等)进行初始化。

ExecuteReader:此专用ExecuteReader实现用于通过适当的 CommandBehavior打开SqlDataReader对象,以便最有效地管理与阅读器关联的连接的有效期。


[csharp] view plain copy
    1. using System;  
    2.   
    3. using System.Collections.Generic;  
    4.   
    5. using System.Linq;  
    6.   
    7. using System.Text;  
    8.   
    9. using System.Data.SqlClient;  
    10.   
    11. using System.Data;  
    12.   
    13. using System.Configuration;  
    14.   
    15.    
    16.   
    17. namespace DAL  
    18.   
    19.    
    20.   
    21. {  
    22.   
    23.     public class SQLHelp  
    24.   
    25.    
    26.   
    27.     {  
    28.   
    29.         //SqlConnection对象用于建立连接  
    30.   
    31.         SqlConnection mycon = new SqlConnection();  
    32.   
    33.    
    34.   
    35.         //SqlCommand对象用于建立命令  
    36.   
    37.         SqlCommand mycom = new SqlCommand();  
    38.   
    39.    
    40.   
    41.         //用于保存连接字符串  
    42.   
    43.         string strConnection = null;  
    44.   
    45.    
    46.   
    47.         //构造函数,初始化连接  
    48.   
    49.         public SQLHelp()  
    50.   
    51.    
    52.   
    53.         {  
    54.   
    55.             strConnection = ConfigurationManager.ConnectionStrings["SqlConnection_Chat"].ConnectionString;  
    56.   
    57.             mycon.ConnectionString = strConnection;  
    58.   
    59.             //mycon.ConnectionString = "Data Source=.;Initial Catalog=Chat;Integrated Security=True";  
    60.   
    61.         }  
    62.   
    63.    
    64.   
    65.    
    66.   
    67.         /// <summary>  
    68.   
    69.         /// 执行SQL语句或存储过程,返回数据集  
    70.   
    71.         /// </summary>  
    72.   
    73.         /// <param name="commandText">SQL语句或存储过程名</param>  
    74.   
    75.         /// <param name="para">参数数组</param>  
    76.   
    77.         /// <param name="type">执行类型</param>  
    78.   
    79.         /// <returns></returns>  
    80.   
    81.         public DataSet doExceutForDataset(string commandText, SqlParameter[] para, CommandType type)  
    82.   
    83.    
    84.   
    85.         {  
    86.   
    87.             //定义DataSet存储返回数据集  
    88.   
    89.             DataSet ds = new DataSet();  
    90.   
    91.    
    92.   
    93.             //定义command命令  
    94.   
    95.             mycom.CommandText = commandText;  
    96.   
    97.    
    98.   
    99.             //判断是否有参数,有则循环赋值  
    100.   
    101.             if (para != null)  
    102.   
    103.    
    104.   
    105.             {  
    106.   
    107.                 for (int i = 0; i < para.Length; i++)  
    108.   
    109.    
    110.   
    111.                 {  
    112.   
    113.                     mycom.Parameters.Add(para[i]);  
    114.   
    115.                 }  
    116.   
    117.             }  
    118.   
    119.    
    120.   
    121.             //确定执行类型(SQL语句还是存储过程)  
    122.   
    123.             mycom.CommandType = type;  
    124.   
    125.    
    126.   
    127.             try  
    128.   
    129.    
    130.   
    131.             {  
    132.   
    133.                 //打开连接  
    134.   
    135.                 mycon.Open();  
    136.   
    137.    
    138.   
    139.                 //为command命令指定连接  
    140.   
    141.                 mycom.Connection = mycon;  
    142.   
    143.    
    144.   
    145.                 //执行command命令  
    146.   
    147.                 SqlDataAdapter da = new SqlDataAdapter(mycom);  
    148.   
    149.    
    150.   
    151.                 //填充数据集  
    152.   
    153.                 da.Fill(ds, "table1");  
    154.   
    155.             }  
    156.   
    157.             catch (Exception e)  
    158.   
    159.    
    160.   
    161.             {  
    162.   
    163.                 throw new Exception(e.Message, e);  
    164.   
    165.             }  
    166.   
    167.             finally  
    168.   
    169.    
    170.   
    171.             {  
    172.   
    173.                 //关闭连接  
    174.   
    175.                 mycon.Close();  
    176.   
    177.             }  
    178.   
    179.             return ds;  
    180.   
    181.         }  
    182.   
    183.    
    184.   
    185.    
    186.   
    187.         /// <summary>  
    188.   
    189.         /// 执行SQL语句或存储过程,返回受影响的行数  
    190.   
    191.         /// </summary>  
    192.   
    193.         /// <param name="commandText">SQL语句或存储过程名</param>  
    194.   
    195.         /// <param name="para">参数数组</param>  
    196.   
    197.         /// <param name="type">执行类型</param>  
    198.   
    199.         /// <returns></returns>  
    200.   
    201.         public int doExceutForRowCount(string commandText, SqlParameter[] para, CommandType type)  
    202.   
    203.    
    204.   
    205.         {  
    206.   
    207.             //定义result用于存储返回值  
    208.   
    209.             int result = -1;  
    210.   
    211.    
    212.   
    213.             //定义command命令  
    214.   
    215.             mycom.CommandText = commandText;  
    216.   
    217.    
    218.   
    219.             //判断是否有参数,有则循环赋值  
    220.   
    221.             if (para != null)  
    222.   
    223.    
    224.   
    225.             {  
    226.   
    227.                 for (int i = 0; i < para.Length; i++)  
    228.   
    229.    
    230.   
    231.                 {  
    232.   
    233.                     mycom.Parameters.Add(para[i]);  
    234.   
    235.                 }  
    236.   
    237.             }  
    238.   
    239.    
    240.   
    241.             //确定执行类型(SQL语句还是存储过程)  
    242.   
    243.             mycom.CommandType = type;  
    244.   
    245.    
    246.   
    247.             try  
    248.   
    249.    
    250.   
    251.             {  
    252.   
    253.                 //打开连接  
    254.   
    255.                 mycon.Open();  
    256.   
    257.    
    258.   
    259.                 //为command命令指定连接  
    260.   
    261.                 mycom.Connection = mycon;  
    262.   
    263.    
    264.   
    265.                 //执行命令,返回受影响的行数  
    266.   
    267.                 result = mycom.ExecuteNonQuery();  
    268.   
    269.             }  
    270.   
    271.             catch (Exception e)  
    272.   
    273.    
    274.   
    275.             {  
    276.   
    277.                 throw new Exception(e.Message, e);  
    278.   
    279.             }  
    280.   
    281.             finally  
    282.   
    283.    
    284.   
    285.             {  
    286.   
    287.                 //关闭连接  
    288.   
    289.                 mycon.Close();  
    290.   
    291.             }  
    292.   
    293.             return result;  
    294.   
    295.         }  
    296.   
    297.    
    298.   
    299.    
    300.   
    301.         /// <summary>  
    302.   
    303.         /// 用户登录验证 成功返回true  
    304.   
    305.         /// </summary>  
    306.   
    307.         /// <param name="strUserName">用户名</param>  
    308.   
    309.         /// <param name="strPwd">密码</param>  
    310.   
    311.         /// <returns></returns>  
    312.   
    313.         public bool checkLogin(string strUserName, string strPwd)  
    314.   
    315.    
    316.   
    317.         {  
    318.   
    319.             bool flag = false;  
    320.   
    321.             int count = -1;  
    322.   
    323.             string strSql = "SELECT COUNT(*) FROM UserInfo WHERE UserName= '" + strUserName + "'and Pwd='" + strPwd + "'";  
    324.   
    325.    
    326.   
    327.             //Command命令  
    328.   
    329.             mycom = new SqlCommand();  
    330.   
    331.             mycom.Connection = mycon;  
    332.   
    333.             mycom.CommandText = strSql;  
    334.   
    335.    
    336.   
    337.             //执行Command命令  
    338.   
    339.             try  
    340.   
    341.    
    342.   
    343.             {  
    344.   
    345.                 mycon.Open();  
    346.   
    347.                 count = Convert.ToInt32(mycom.ExecuteScalar());  
    348.   
    349.                 if (count == 0)  
    350.   
    351.    
    352.   
    353.                 {  
    354.   
    355.                     flag = false;  
    356.   
    357.                 }  
    358.   
    359.                 else  
    360.   
    361.                     if (count > 0)  
    362.   
    363.    
    364.   
    365.                     {  
    366.   
    367.                         flag = true;  
    368.   
    369.                     }  
    370.   
    371.             }  
    372.   
    373.             catch (SqlException ex)  
    374.   
    375.    
    376.   
    377.             {  
    378.   
    379.                 throw new Exception(ex.Message, ex);  
    380.   
    381.             }  
    382.   
    383.             finally  
    384.   
    385.    
    386.   
    387.             {  
    388.   
    389.                 mycon.Close();  
    390.   
    391.             }  
    392.   
    393.             return flag;  
    394.   
    395.         }  
    396.   
    397.    
    398.   
    399.    
    400.   
    401.         /// <summary>  
    402.   
    403.         ///  执行一条SQL语句,返回第一行第一列的元素  
    404.   
    405.         /// </summary>  
    406.   
    407.         /// <param name="strSql">SQL语句</param>  
    408.   
    409.         /// <returns></returns>  
    410.   
    411.         public string doSqlForFirst(string strSql)  
    412.   
    413.    
    414.   
    415.         {  
    416.   
    417.             string result = null;//记录返回元素  
    418.   
    419.             mycom = new SqlCommand();  
    420.   
    421.             mycom.Connection = mycon;  
    422.   
    423.             mycom.CommandText = strSql;  
    424.   
    425.    
    426.   
    427.             try  
    428.   
    429.    
    430.   
    431.             {  
    432.   
    433.                 mycon.Open();  
    434.   
    435.                 result = mycom.ExecuteScalar().ToString();  
    436.   
    437.             }  
    438.   
    439.             catch (SqlException ex)  
    440.   
    441.    
    442.   
    443.             {  
    444.   
    445.                 throw new Exception(ex.Message, ex);  
    446.   
    447.             }  
    448.   
    449.             finally  
    450.   
    451.    
    452.   
    453.             {  
    454.   
    455.                 mycon.Close();  
    456.   
    457.             }  
    458.   
    459.             return result;  
    460.   
    461.         }  
    462.   
    463.    
    464.   
    465.    
    466.   
    467.         /// <summary>  
    468.   
    469.         /// 执行一条SQL语句,返回受影响的行数  
    470.   
    471.         /// </summary>  
    472.   
    473.         /// <param name="strSql">SQL语句</param>  
    474.   
    475.         /// <returns></returns>  
    476.   
    477.         public int doSql(string strSql)  
    478.   
    479.    
    480.   
    481.         {  
    482.   
    483.             int result = -1;//记录受影响的行数  
    484.   
    485.    
    486.   
    487.             //Command命令  
    488.   
    489.             mycom = new SqlCommand();  
    490.   
    491.             mycom.Connection = mycon;  
    492.   
    493.             mycom.CommandText = strSql;  
    494.   
    495.    
    496.   
    497.             //执行Command命令  
    498.   
    499.             try  
    500.   
    501.    
    502.   
    503.             {  
    504.   
    505.                 mycon.Open();  
    506.   
    507.                 result = Convert.ToInt32(mycom.ExecuteNonQuery());  
    508.   
    509.             }  
    510.   
    511.             catch (SqlException ex)  
    512.   
    513.    
    514.   
    515.             {  
    516.   
    517.                 throw new Exception(ex.Message, ex);  
    518.   
    519.             }  
    520.   
    521.             finally  
    522.   
    523.    
    524.   
    525.             {  
    526.   
    527.                 mycon.Close();  
    528.   
    529.             }  
    530.   
    531.             return result;  
    532.   
    533.         }  
    534.   
    535.    
    536.   
    537.    
    538.   
    539.         执行带参数的sql语句(select语句),返回数据流  
    540.   
    541.     }  
    542.   

你可能感兴趣的:(help)