词条 | SqlHelper |
释义 | 什么是SQLHelperSqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法,目前SqlHelper有很多版本,主要以微软一开始发布的SqlHelper类,后面包含进了Enterprise Library开源包中了。还有一个主要版本是dbhelper.org开源的sqlhelper组件,优点是简洁,高性能,不仅仅支持sqlserver,同时支持sqlserver、oracle、access、Mysql数据库,也是一个开源项目,提供免费下载。 SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。 SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。 SqlHelper配置项在应用SqlHelper前最好使用web.config配置连接字符串,这样有利于网站的可移植性和代码的简洁。 <connectionStrings> <!--SqlServerHelper连接字符串设定--> <add connectionString="server=.;uid=sa;pwd=123456;database=yourdatabase" name="SqlServerHelper"/> <!--Oracle连接字符串设定--> <add connectionString="Data Source=orcl;User Id=system;Password=***;Integrated Security=no" name="OracleHelper"/> <!--MySql连接字符串设定--> <add connectionString="server=localhost;uid=root;pwd=123456;database=mysqldatabase" name="MySqlHelper"/> </connectionStrings> SqlHelper调用源码编写SqlHelper调用代码: SqlHelper支持多种数据库包括MySql、SqlServer、Oracle、Access数据库,如果的数据库是SqlServer,哪么你可以使用SqlServerHelper类,如果是MySql,可以使用MySqlHelper,如果是Access,可以使用AccessHelper。如果是Oracle则可以使用OracleHelper类。 SqlHelper的书写风格很多,你可以选择自己的需求和爱好使用静态方式或对象方式。各和利弊。选择情况使用吧! 第一种,静态方式,静态方式也是目前应用最多的一种,因为其简单,所以在写一个Sql语句时,用一个方法就可以搞定。如果在一个过种时需要多个Sql语句执行时,不然得创建SqlConnection和控制他的传参,使语句复杂。不然就是每执行一个sql语句让SqlConnection创建一次,使性能影响。但是在只执行一个简单的查询语句时,显的更简单,所以这种方式在简单的执行逻辑面前,受到大家的喜爱! //查询语句执行: DataTable dt=SqlServerHelper.ReadTable("select * from table1"); //插入语句执行: SqlServerHelper.ExecuteNonQuery("insert into [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 = new SqlServerHelper()) { helper.Command.CommandText = "delete from [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(); } 这是官方示例代码中的一部分,语法简单,在一个using语句中执行了delete删除语句和select查语句。 比如,如果你想执行事务时,可以使用: using (SqlServerHelper helper = new SqlServerHelper()) { helper.Command.CommandText = "delete from [Students] where stid=@stid"; helper.AddParameter("@stid", SqlDbType. Int, student_id); helper.Open(); DbTransaction tran = helper.Connection.BeginTransaction(); helper.Command.Transaction=tran; try { helper.ExecuteNoneQuery(); tran.Rollback(); }catch { tran.Rollback(); throw; } } 主要成员在 SqlHelper 类中实现的方法包括: ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。 ExecuteReader。此方法用于返回 SqlDataReader 对象,该对象包含由某一命令返回的结果集。 ExecuteDataset。此方法返回 DataSet 对象,该对象包含由某一命令返回的结果集。 ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。 ExecuteXmlReader。此方法返回 FOR XML 查询的 XML 片段。 除了这些公共方法外,SqlHelper 类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过 SqlCommand 对象来执行。在 SqlCommand 对象能够被执行之前,所有参数都必须添加到 Parameters 集合中,并且必须正确设置 Connection、CommandType、CommandText 和 Transaction 属性。SqlHelper 类中的专用函数主要用于提供一种一致的方式,以便向 SQL Server 数据库发出命令,而不考虑客户端应用程序调用的重载方法实现。SqlHelper 类中的专用实用程序函数包括: AttachParameters:该函数用于将所有必要的 SqlParameter 对象连接到正在运行的 SqlCommand。 AssignParameterValues:该函数用于为 SqlParameter 对象赋值。 PrepareCommand:该函数用于对命令的属性(如连接、事务环境等)进行初始化。 ExecuteReader:此专用 ExecuteReader 实现用于通过适当的 CommandBehavior 打开 SqlDataReader 对象,以便最有效地管理与阅读器关联的连接的有效期。 注意事项1、如果使用SqlHelper方法调用数据库存储过程,需要获取存储过程的返回值,请使用带有SqlParameter[]参数的方法,Object[]参数的方法无法获取存储过程返回值 源程序(中文注释)/// <summary> /// 自定义访问通用类 /// </summary> public class SqlDbHelper { string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString; /// <summary> /// 构造函数 /// </summary> public SqlDbHelper() { } /// <summary> /// ExecuteNonQuery操作,对数据库进行 增、删、改 操作((1) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <returns> </returns> public int ExecuteNonQuery(string sql) { return ExecuteNonQuery(sql, CommandType.Text, null); } /// <summary> /// ExecuteNonQuery操作,对数据库进行 增、删、改 操作(2) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param> /// <returns> </returns> public int ExecuteNonQuery(string sql, CommandType commandType) { return ExecuteNonQuery(sql, commandType, null); } /// <summary> /// ExecuteNonQuery操作,对数据库进行 增、删、改 操作(3) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param> /// <param name="parameters">参数数组 </param> /// <returns> </returns> public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters) { int count = 0; using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(sql, connection)) { command.CommandType = commandType; if (parameters != null) { foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } } connection.Open(); count = command.ExecuteNonQuery(); } } return count; } /// <summary> /// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataSet类型结果(1) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <returns> </returns> public DataSet ExecuteDataSet(string sql) { return ExecuteDataSet(sql, CommandType.Text, null); } /// <summary> /// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataSet类型结果(2) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param> /// <returns> </returns> public DataSet ExecuteDataSet(string sql, CommandType commandType) { return ExecuteDataSet(sql, commandType, null); } /// <summary> /// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataSet类型结果(3) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param> /// <param name="parameters">参数数组 </param> /// <returns> </returns> public DataSet ExecuteDataSet(string sql, CommandType commandType, SqlParameter[] parameters) { DataSet ds = new DataSet(); using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(sql, connection)) { command.CommandType = commandType; if (parameters != null) { foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } } SqlDataAdapter adapter = new SqlDataAdapter(command); adapter.Fill(ds); } } return ds; } /// <summary> /// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataTable类型结果(1) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <returns> </returns> public DataTable ExecuteDataTable(string sql) { return ExecuteDataTable(sql, CommandType.Text, null); } /// <summary> /// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataTable类型结果(2) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param> /// <returns> </returns> public DataTable ExecuteDataTable(string sql, CommandType commandType) { return ExecuteDataTable(sql, commandType, null); } /// <summary> /// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataTable类型结果(3) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param> /// <param name="parameters">参数数组 </param> /// <returns> </returns> public DataTable ExecuteDataTable(string sql, CommandType commandType, SqlParameter[] parameters) { DataTable data = new DataTable(); using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(sql, connection)) { command.CommandType = commandType; if (parameters != null) { foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } } SqlDataAdapter adapter = new SqlDataAdapter(command); adapter.Fill(data); } } return data; } /// <summary> /// ExecuteReader执行一查询,返回一SqlDataReader对象实例(1) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <returns> </returns> public SqlDataReader ExecuteReader(string sql) { return ExecuteReader(sql, CommandType.Text, null); } /// <summary> /// ExecuteReader执行一查询,返回一SqlDataReader对象实例(2) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param> /// <returns> </returns> public SqlDataReader ExecuteReader(string sql, CommandType commandType) { return ExecuteReader(sql, commandType, null); } /// <summary> /// ExecuteReader执行一查询,返回一SqlDataReader对象实例(3) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param> /// <param name="parameters">参数数组 </param> /// <returns> </returns> public SqlDataReader ExecuteReader(string sql, CommandType commandType, SqlParameter[] parameters) { SqlConnection connection = new SqlConnection(connectionString); SqlCommand command = new SqlCommand(sql, connection); command.CommandType = commandType; if (parameters != null) { foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } } connection.Open(); return command.ExecuteReader(CommandBehavior.CloseConnection); } /// <summary> /// ExecuteScalar执行一查询,返回查询结果的第一行第一列(1) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <returns> </returns> public Object ExecuteScalar(string sql) { return ExecuteScalar(sql, CommandType.Text, null); } /// <summary> /// ExecuteScalar执行一查询,返回查询结果的第一行第一列(2) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param> /// <returns> </returns> public Object ExecuteScalar(string sql, CommandType commandType) { return ExecuteScalar(sql, commandType, null); } /// <summary> /// ExecuteScalar执行一查询,返回查询结果的第一行第一列(3) /// </summary> /// <param name="sql">要执行的SQL语句 </param> /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param> /// <returns> </returns> public Object ExecuteScalar(string sql, CommandType commandType, SqlParameter[] parameters) { object result = null; using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(sql, connection)) { command.CommandType = commandType; if (parameters != null) { foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } } connection.Open(); result = command.ExecuteScalar(); } } return result; } /// <summary> /// 返回当前连接的数据库中所有由用户创建的数据库 /// </summary> /// <returns> </returns> public DataTable GetTables() { DataTable data = null; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); data = connection.GetSchema("Tables"); } return data; } } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。