ADO.NET的SqlServer.NET数据提供程序,核心的类有4个,而在这个订餐系统中,我们只使用了3个,SqlConnection、SqlCommand、SqlDataReader,就是这3个核心类,我们也将要把它们封装到SQLHelper.cs类中。
前面,我们在使用这几个类访问数据库的时候,有人,觉得很简单;有人,甚至觉得很烦了。
我们再送它们几程吧,不由得想起了那句诗:
版权所有©2012,西园电脑工作室.欢迎转载,转载请注明出处.更多文章请参阅博客http://blog.csdn.com/yousuosi
轻轻的我走了,
正如我轻轻的来;
我轻轻的招手,
作别西天的云彩……
四相送,送到代码页里的类SQLHelper中
using System; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Collections.Generic; using WestGarden.Model; namespace WestGarden.Web { public partial class Default6 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { IList<CategoryInfo> catogories = new List<CategoryInfo>(); string connectionString = ConfigurationManager.ConnectionStrings["NetShopConnString"].ConnectionString; string cmdText = "SELECT * FROM Category"; //使用静态类,应用程序运行的时候,它就存在于内存中了,所以,也就不需要再new了。 SqlDataReader rdr = SqlHelper.ExecuteReader(connectionString, CommandType.Text, cmdText,null); while (rdr.Read()) { CategoryInfo category = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2)); catogories.Add(category); } rdr.Close(); ddlCategories.DataSource = catogories; ddlCategories.DataTextField = "Name"; ddlCategories.DataValueField = "CategoryId"; ddlCategories.DataBind(); } } //这个类是静态的,应用程序启动时,自动驻留在内存中,所建连接,在使用过程中, //也只是Close(),放回到连接池中。并没有注销Dispose(),可以下次连接时,快速使用。 public abstract class SqlHelper { public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(connectionString); try { //cmd.Connection = conn; //cmd.CommandType = cmdType; //cmd.CommandText = cmdText; //conn.Open(); PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); //如果创建了 SqlDataReader 并将 CommandBehavior 设置为 CloseConnection, //则关闭 SqlDataReader 会自动关闭此连接。 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; } catch { conn.Close(); throw; } //finally //{ // conn.Close(); //} } private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = cmdType; if (cmdParms != null) { foreach (SqlParameter parm in cmdParms) cmd.Parameters.Add(parm); } } } }
五相送,送到App_Code文件夹中的类SQLHelper.cs中。
第一次在Web中添加类,会提示建立文件夹App_Code,放在这个文夹中的类,使用起来,和前面放在主页中没有任何区别,不需要添加引用,也不需要using…
using System; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Collections; namespace WestGarden.Web { /// <summary> /// SQLHelper 的摘要说明 /// </summary> //这个类是静态的,应用程序启动时,自动驻留在内存中,所建连接,在使用过程中, //也只是Close(),放回到连接池中。并没有注销Dispose(),可以下次连接时,快速使用。 public abstract class SqlHelper { public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(connectionString); try { //cmd.Connection = conn; //cmd.CommandType = cmdType; //cmd.CommandText = cmdText; //conn.Open(); PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); //如果创建了 SqlDataReader 并将 CommandBehavior 设置为 CloseConnection, //则关闭 SqlDataReader 会自动关闭此连接。 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; } catch { conn.Close(); throw; } //finally //{ // conn.Close(); //} } private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = cmdType; if (cmdParms != null) { foreach (SqlParameter parm in cmdParms) cmd.Parameters.Add(parm); } } } }
此时,主页代码不需要做任何改变,在这里,就不贴出来了。
六相送,送到类库DBUtility中的类SQLHelper.cs中。
把类建立在类库DBUtility中,使用起来就不一样了。第一,要在Web中添加引用→项目→DBUtility;第二,要使用using WestGarden.DBUtility。使用类库中的类,都需要这么两步,如果这两步都不少,还是出错的话,那,极有可能是这个类库单独编译就没有通过,没有生成dll文件。
using System; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Collections; namespace WestGarden.DBUtility { /// <summary> /// SQLHelper 的摘要说明 /// </summary> //这个类是静态的,应用程序启动时,自动驻留在内存中,所建连接,在使用过程中, //也只是Close(),放回到连接池中。并没有注销Dispose(),可以下次连接时,快速使用。 public abstract class SqlHelper { public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(connectionString); try { //cmd.Connection = conn; //cmd.CommandType = cmdType; //cmd.CommandText = cmdText; //conn.Open(); PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); //如果创建了 SqlDataReader 并将 CommandBehavior 设置为 CloseConnection, //则关闭 SqlDataReader 会自动关闭此连接。 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; } catch { conn.Close(); throw; } //finally //{ // conn.Close(); //} } private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = cmdType; if (cmdParms != null) { foreach (SqlParameter parm in cmdParms) cmd.Parameters.Add(parm); } } } }
此时,主页代码,只多了一句using WestGarden.DBUtility;在我们这个订餐系统中,类别表主要使用了两种呈现方式:下拉列表框和Repeater,这里,我们把使用Repeater的后台代码贴一下吧,前台代码,就略了…
sing System; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Collections.Generic; using WestGarden.Model; using WestGarden.DBUtility; namespace WestGarden.Web { public partial class Default8 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { IList<CategoryInfo> catogories = new List<CategoryInfo>(); string connectionString = ConfigurationManager.ConnectionStrings["NetShopConnString"].ConnectionString; string cmdText = "SELECT * FROM Category"; //使用静态类,可直接调用,不需要new。 SqlDataReader rdr = SqlHelper.ExecuteReader(connectionString, CommandType.Text, cmdText,null); while (rdr.Read()) { CategoryInfo category = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2)); catogories.Add(category); } rdr.Close(); repCategories.DataSource = catogories; repCategories.DataBind(); } } }
一点说明:
类库DBUtility中的SQLHelper.cs,使用了抽象类和静态函数。这个类,使用的时候,不需要实例化,可以直接调用。但,还不完全是微软的SQLHelper,进一步的改进,是把连接字符串放在Web.config文件中,并建立了连接池,而在SQLHelper中读出来,放在静态的字符串中。这会进一步改进它的性能。
另:我们目前使用的这个SQLHelper,似乎并不是微软的最新版本,最新版本的SQLHelper又做了哪些改进,它的详细的运行机制怎么样,有待于大家共同的探讨哈...
相关推荐
ADO.NET自己封装SqlHelper类 1、简单封装 2、传递参数封装 3、参数可变封装
ADO.NET中简单实用的三种方法,并将其进行封装,便于操作者进行开发与使用。
ADO.NET实例操作数据库SQLSERVER。
ADO.NET操作数据库,在ADO.NET中怎样快速 ,有效地操作数据库,和绑定数据
这个是一个强大的ADO辅助类,直接引用到BIN即可用,他的作用就是辅助对数据库和程序之间的数据交流,效率提高不止10倍,适用于SQL SERVER 和oracal。
经常调用ado.net的程序员,每次都要new Connection对象、Command对象。甚是麻烦,敲了个SQLHelper类,供初学者下载使用。 是针对SqlServer数据库的。 里头包含了五大对象、ado.net的基本操作够用了,(*^__^*) 嘻嘻…
数据结构ADO.net访问数据库内涵详细信息
算是一个通用类,在利用ASP.NET网站和系统开发中可以实现对数据库常用操作
声明:本人以前是做网管,目前在学习C# ADO.NET阶段,编写的代码可能不专业,还请谅解,我一定保证代码可以 正常调试通过,相互学习QQ275893649(添加时请备注相互交流C#) 环境是VS2010 , ACCESS2010 , .NET 4.0,WPF ...
采用MVC+ADO.NET进行增删改查案例,采用VS2017跟sqlserver2008 可直接解压运行,一套齐全
提供了一分学ado可能会用到的简单数据库,可供参考,谢谢
SqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法,目前SqlHelper有很多版本,主要以微软一开始发布的SqlHelper类,后面包含进了Enterprise Library开源包中了。还有一个主要版本是...
分组 类型转换函数 向表中插入多条数据 字符串函数 4.ADO增删查改 登录demo 带参数的sql语句 插入自动返回行号 5.ADO.NET连接池 封装SQLHelper 省市联动 资料管理器 6.索引 内连接 子查询 7.连接查询 存储过程 事务 ...
这款三层架构实现了BLL、DAL、Model,用SQLHelper与SQL Server通信。这款架构只需要修改SQL参数就可以使用,具有方便快捷的特点,既可以用于C#语言的项目开发,也可以用于教学。
VB.Net版的SqlHelper,希望对大家有用!
结合我帖子 VB.NET SQLHelper 类使用
帮助类,sqlhelper ,dbhelper ,asp.net里面用到的帮助类。
SqlHelper,虽然他很小,但是他很强.
asp.net开发通用类 最新整理 可以用在任何地方 下载分很高,本不打算泄密
SqlHelper 操作数据库通用类 ado.net asp.net 有详细的说明 十分好用