微软SqlHelper类中文注释和使用方法

SqlHelper.cs是N年前微软出品的一个使用ADO.Net方法对SQL Server数据库进行操作的封装类,随后有高人根据这个类写了DbHelper.cs以操作SQL Server之外的数据库,而后微软也发布了Enterprise Library企业库组件。但是对于刚开始学习ADO.Net/C#或者中小企业应用层面来说,根据SqlHelper.cs类做简单的数据库访问层的东西已经足够用了。Enterprise Library企业库虽然十分的强大,但是入手和配置都不是那么简单,杀鸡完全不用宰牛刀。

其实这个很古老的类还有一个很值得学习的地方:C#中重载的使用。每个查询数据库的方法都有8个左右的重载方法,对C#面向对象思想中的多态性不了解的,看过这些个重载方法基本上都会清清楚楚了。此外应该注意的是public sealed class SqlHelper{}:sealed修饰符修饰的类是封闭的类,是不能被继承的。

和微软发布的SqlHelper.cs不同,为了方便我把里面的SqlHelperParameterCatch.cs单独列出来了。下面的下载中还有OledbHelper.cs、OdbcHelper.cs和XMLHelper.cs可供使用,分别针对不同的数据库类型。下面略微解析一下SqlHelper.cs这个类的使用方法,其中类内部使用的私有方法不再介绍,因为公共方法的使用大同小异,所以就以最简单的ExecuteNonQuery()方法作为范例。

ASP.NET/C#语言:
下述代码是ExecuteNonQuery()的9个重载方法。
前3个算是准备查询。
//#1-1
public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText){}
//#1-2
public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, 
params SqlParameter[] commandParameters){}
//#1-3
public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues){}

中间3个是执行查询。
//#2-1
public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText){}
//#2-2
public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText,
 params SqlParameter[] commandParameters){}
//#2-3
public static int ExecuteNonQuery(SqlConnection connection, string spName, params object[] parameterValues){}

后面3个则是用于SQL事物查询。
//#3-1
public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText){}
//#3-2
public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText,
 params SqlParameter[] commandParameters){}
//#3-3
public static int ExecuteNonQuery(SqlTransaction transaction, string spName, params object[] parameterValues){}

再细分,

//#2-1
public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType,
 string commandText){}
执行的是无参数的SQL语句,而

//#2-2
public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, 
string commandText, params SqlParameter[] commandParameters){}
执行的是包含参数数组的SQL语句(参数数组可以为空)。


//#2-3
public static int ExecuteNonQuery(SqlConnection connection, string spName, 
params object[] parameterValues){}
执行的则是无返回值的存储过程。

实际上,#1-1和#1-3

//#1-1
public static int ExecuteNonQuery(string connectionString, CommandType commandType,
 string commandText){}

//#1-3
public static int ExecuteNonQuery(string connectionString, string spName,
 params object[] parameterValues){}
重载是为了方便无参数的SQL语句。


而#1-3和#2-3

//#1-3
public static int ExecuteNonQuery(string connectionString, string spName, 
params object[] parameterValues){}


//#2-3
public static int ExecuteNonQuery(SqlConnection connection, string spName, 
params object[] parameterValues){}
重载只是为了方便调用存储过程,他们的本质还是和#1-2和#2-2

//#1-2
public static int ExecuteNonQuery(string connectionString, CommandType commandType,
 string commandText, 
params SqlParameter[] commandParameters){}
//#2-2
public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, 
string commandText,
 params SqlParameter[] commandParameters){}
一样。下面是针对重载方法的一些简单使用。

1. ExecuteNonQuery()执行无参数的SQL语句。
ASP.NET/C#语言:
string sql = "INSERT INTO Customer(Country,Firstname,Lastname) VALUES('USA','Steven','Sun')";
if (SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql) == 1)
{
    Response.Write("添加成功!");
}


可以简单的分析一下执行的过程:

  1. ExecuteNonQuery()方法根据参数不同将会首先重载#1-1,
  2. //#1-1
    public static int ExecuteNonQuery(string connectionString, CommandType commandType,
     string commandText){}
    在#1-1中设置参数数组为null,既
    SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql,
  3.  (SqlParameter[])null)。
  4. 这时候ExecuteNonQuery()方法根据参数不同将会首先重载#1-2,
  5. //#1-2
    public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, 
    params SqlParameter[] commandParameters){}
  6. 在#1-2中重载#2-2方法执行查询。
  7. //#2-2
    public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, 
    string commandText, params SqlParameter[] commandParameters){}
    在#2-2中首先要使用私有的PrepareCommand()方法把参数放入SqlCommand中,然后执行ADO.Net的ExecuteNonQuery()方法(这个是无参数的原始方法),执行成功则返回整数1。
  8. 剩下的就是一些判断和输出的过程了。

也可以自己写一些别的方法验证其他重载方法的时候,在Visual Studio中按F11可以逐语句的查看执行的过程,下面两个方法的使用也是一样的,所以就只贴代码了。

2. ExecuteNonQuery()执行有参数数组的SQL语句。
ASP.NET/C#语言:
//修改指定CustomerId的顾客的国籍
string sql = "UPDATE Customer SET Country=@Country WHERE CustomerId=@CustomerId";
SqlParameter[] param = new SqlParameter[]
{
    new SqlParameter("@Version", SqlDbType.VarChar),
    new SqlParameter("@CustomerId", SqlDbType.Int)
};
param[0].Value = "England";
param[1].Value = 5;
if (SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql, param) == 1)
{
    Response.Write("修改成功!");
}
3. ExecuteNonQuery()执行无返回值的存储过程。
SQL Server语言:
CREATE PROCEDURE [dbo].[SP_ExecuteNonQuery]
AS
BEGIN
INSERT INTO Customer VALUES('Japan','Beautiful','Girl')
END

ASP.NET/C#语言:
if (SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, "SP_ExecuteNonQuery") == 1)
{
     Response.Write("执行无参数存储过程成功");
}


其他方法都是类似的,这个类中我们常用的方法如下:

  1. ExecuteNonQuery(): 执行简单的无返回值的查询。
  2. ExecuteDataset(): 返回Dataset的查询,相当于返回一个数组。
  3. ExecuteReader(): 使用DataReader读取数据。(注:少量数据的情况下使用SqlDataReader的效率高于使用Dataset)
  4. ExecuteScalar(): 返回结果集中的第一行第一列,相当于返回单个值。

其他的方法使用的较少,就不介绍了。强烈建议使用Visual Studio 2010调试这些程序,下面是这几个类的下载地址,如有问题,欢迎和我一起探讨。


在原文的基础上稍有改动。

参考自:一个人飞”博客。



  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值