FeiYan

网站导航

搜索

腾讯微博 新浪微博 FeelBLog 开源中国社区

SqlHelper类中文注释和使用方法

2012-09-13 12:05:32     2个评论     6578次访问

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()方法作为范例。

//#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){}
         
         
//#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-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){}

上述代码是ExecuteNonQuery()的9个重载方法,其中前3个算是准备查询,中间3个是执行查询,后面3个则是用于SQL事物查询。再细分,#2-1执行的是无参数的SQL语句,而#2-2执行的是包含参数数组的SQL语句(参数数组可以为空),#2-3执行的则是无返回值的存储过程。实际上,#1-1和#1-3重载是为了方便无参数的SQL语句,而#1-3和#2-3重载只是为了方便调用存储过程,他们的本质还是和#1-2和#2-2一样。下面是针对重载方法的一些简单使用。

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

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

ExecuteNonQuery()方法根据参数不同将会首先重载#1-1,在#1-1中设置参数数组为null,既SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql, (SqlParameter[])null)。

这时候ExecuteNonQuery()方法根据参数不同将会首先重载#1-2,在#1-2中重载#2-2方法执行查询。

在#2-2中首先要使用私有的PrepareCommand()方法把参数放入SqlCommand中,然后执行ADO.Net的ExecuteNonQuery()方法(这个是无参数的原始方法),执行成功则返回整数1。

剩下的就是一些判断和输出的过程了。

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

2. ExecuteNonQuery()执行有参数数组的SQL语句
//修改指定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()执行无返回值的存储过程
CREATE PROCEDURE [dbo].[SP_ExecuteNonQuery] 
AS
BEGIN
INSERT INTO Customer VALUES('Japan','Beautiful','Girl')
END
if (SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, "SP_ExecuteNonQuery") == 1)
{
     Response.Write("执行无参数存储过程成功");
}

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

ExecuteNonQuery(): 执行简单的无返回值的查询。

ExecuteDataset(): 返回Dataset的查询,相当于返回一个数组。

ExecuteReader(): 使用DataReader读取数据。(注:少量数据的情况下使用SqlDataReader的效率高于使用Dataset)

ExecuteScalar(): 返回结果集中的第一行第一列,相当于返回单个值。

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

下载文件丢失,请访问百度文库下载:http://wenku.baidu.com/view/9d28456248d7c1c708a14554.html

文章标签: sqlhelper  csharp 

本文地址:SqlHelper类中文注释和使用方法

相关文章

2013-02-25:C#+SQL Sever的大学生就业招聘系统

2 Comments »

  1. 飞晏飞晏
    不好意思,文件我也找不到了,线上的在百度文库:http://wenku.baidu.com/view/9d28456248d7c1c708a14554.html

    @未来: 你好,我是ASP.NET新手,您这的附件下载不了了。能发份电邮给我么:tx5460@163.com,万分感谢

    2013-06-08 09:20:08   

  2. 未来未来
    你好,我是ASP.NET新手,您这的附件下载不了了。能发份电邮给我么:tx5460@163.com,万分感谢

    2013-06-07 23:24:46   

发布评论

最新评论

  1. SpecsSpecs

    不错~~

  2. zhyzhy

    我也遇到这个问题 不知道是swf 、jcrop 、 uploadify 还是浏览器缓存

  3. java开发java开发

    您好!我按你的源码进行了编,能正常运行,但是我们项目是由java开发的,怎么做才能将生成的一个可执行文件?我想把这个文件放到服务器上直接运行,不想安装~