SqlServerHelper类,整理微软提供的helper
2011-11-23 10:09
169 查看
微软在petShop中使用了SqlServerHelper类,通过调用静态方法实现对数据库的操作,使用起来非常简单顺手,下面整理了该类的代码,并加以说明:
注意:该类并没有完全封装所有数据对象的使用 ,所以在外面使用类时,也会自行使用SqlConnection、SqlCommand等对象;
可以在 http://download.csdn.net/detail/luxin10/3830325 下载,无需积分
//------------------------------------------------------------ // All Rights Reserved , Copyright (C) 2010 , lusens //------------------------------------------------------------ using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; namespace Utility.Data { /// <summary> /// SQLServer数据库操作类 /// 本类主要包括SQLServer数据库的基本操作 /// /// 修改纪录 /// /// 2010.10.22 版本:1.1 lusens 新增了用户传入sql语句列表的事务操作 /// 2010.09.05 版本:1.0 lusens 创建。 /// /// 版本:1.1 /// /// <author> /// <name>lusens</name> /// <date>2010.09.05</date> /// <EMail>lusens@foxmail.com</EMail> /// </author> /// </summary> public abstract class SQLServerHepler { //public static readonly string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["SQLConnString"].ConnectionString; #region public static string GetConnectionStringByConfig() /// <summary> /// 读取配置文件的ConnectionString字符串 /// </summary> /// <returns>Connection连接字符串</returns> public static string GetConnectionStringByConfig() { return System.Configuration.ConfigurationManager.ConnectionStrings["SQLConnString"].ConnectionString; } #endregion #region 执行SQL,返回被操作的行数,public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) /// <summary> /// 执行SQL语句,返回被操作的行数 /// 使用using语句进行conn对象的释放 /// </summary> /// <param name="connectionString">连接字符</param> /// <param name="cmdType">Command类型,SQL语句或存储过程</param> /// <param name="cmdText">SQL语句或存储过程名称</param> /// <param name="commandParameters">参数数组</param> /// <returns>返回被操作行数</returns> public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); using (SqlConnection conn = new SqlConnection(connectionString)) { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return val; } } #endregion #region 执行SQL,返回被操作的行数,public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) /// <summary> /// 执行SQL语句,返回被操作的行数 /// 这里默认使用外面传入的conn对象,使用完成后不会对conn对象进行释放,需要自己在外面进行数据库连接释放 /// </summary> /// <param name="connection">数据库连接对象</param> /// <param name="cmdType">command命令类型,SQL语句或存储过程</param> /// <param name="cmdText">SQL语句或存储过程名称</param> /// <param name="commandParameters">参数数组</param> /// <returns></returns> public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return val; } #endregion #region 执行SQL语句,返回被操作的行数,public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) /// <summary> /// 执行SQL语句,返回被操作的行数 /// 这里默认使用外面传入的conn对象,使用完成后不会对conn对象进行释放,需要自己在外面进行数据库连接释放 /// </summary> /// <param name="trans">SQL事务</param> /// <param name="cmdType">command类型,SQL语句或存储过程</param> /// <param name="cmdText">SQL语句或存储过程名称</param> /// <param name="commandParameters">参数数组</param> /// <returns></returns> public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return val; } #endregion #region 执行SQL,返回SqlDataReader,public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) /// <summary> /// 执行SQL,返回SqlDataReader /// 返回一个连接,所以不能进行conn释放,在外界代码中使用完DataReader后,注意需要释放reader对象 /// 当返回连接对象报错时,这里进行数据库连接的关闭,保证数据库连接使用完成后保持关闭 /// </summary> /// <param name="connectionString">数据库连接字符串</param> /// <param name="cmdType">command命令类型,SQL语句或存储过程</param> /// <param name="cmdText">SQL语句或存储过程名称</param> /// <param name="commandParameters">参数数组</param> /// <returns></returns> public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(connectionString); try { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; } catch (Exception e) { conn.Close(); throw e; } } #endregion #region 执行SQL,返回SqlDataReader, public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) /// <summary> /// 执行SQL,返回SqlDataReader /// 返回一个连接,所以不能进行conn释放,在外界代码中使用完DataReader后,注意需要释放reader对象 /// 当返回连接对象报错时,这里进行数据库连接的关闭,保证数据库连接使用完成后保持关闭 /// </summary> /// <param name="connection">SqlConnection数据库连接对象</param> /// <param name="cmdType">command命令类型,SQL语句或存储过程</param> /// <param name="cmdText">SQL语句或存储过程名称</param> /// <param name="commandParameters">参数数组</param> /// <returns></returns> public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); try { PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; } catch (Exception e) { connection.Close(); throw e; } } #endregion #region 执行SQL,返回DataTable, public static DataTable ExecuteDataTable(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) /// <summary> /// 执行SQL,返回DataTable /// 使用using语句进行conn对象的释放 /// </summary> /// <param name="connectionString">数据库连接字符串</param> /// <param name="cmdType">command命令类型,SQL语句或存储过程</param> /// <param name="cmdText">SQL语句或存储过程名称</param> /// <param name="commandParameters">参数数组</param> /// <returns></returns> public static DataTable ExecuteDataTable(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { DataTable dt = new DataTable(); SqlCommand cmd = new SqlCommand(); using (SqlConnection conn = new SqlConnection(connectionString)) { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); using (SqlDataAdapter sda = new SqlDataAdapter()) { sda.SelectCommand = cmd; sda.Fill(dt); } } return dt; } #endregion #region 执行SQL,返回DataTable,public static DataTable ExecuteDataTable(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) /// <summary> /// 执行SQL,返回DataTable /// 这里默认使用外面传入的conn对象,使用完成后不会对conn对象进行释放,需要自己在外面进行数据库连接释放 /// </summary> /// <param name="connection">数据库连接对象</param> /// <param name="cmdType">Command命令类型,SQL语句或存储过程</param> /// <param name="cmdText">SQL语句或存储过程名称</param> /// <param name="commandParameters">参数数组</param> /// <returns></returns> public static DataTable ExecuteDataTable(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { DataTable dt = new DataTable(); SqlCommand cmd = new SqlCommand(); PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); using (SqlDataAdapter sda = new SqlDataAdapter()) { sda.SelectCommand = cmd; sda.Fill(dt); } return dt; } #endregion #region 返回第一行第一列,public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) /// <summary> /// 返回第一行第一列 /// 使用using语句进行conn对象的释放 /// </summary> /// <param name="connectionString">数据库连接字符串</param> /// <param name="cmdType">Command命令类型,SQL语句还是存储过程</param> /// <param name="cmdText">SQL语句或存储过程名称</param> /// <param name="commandParameters">参数数组</param> /// <returns></returns> public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); using (SqlConnection connection = new SqlConnection(connectionString)) { PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); object val = cmd.ExecuteScalar(); cmd.Parameters.Clear(); return val; } } #endregion #region 返回第一行第一列,public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) /// <summary> /// 返回第一行第一列 /// 使用外面传入的conn对象,使用完成后不会对conn对象进行释放,需要自己在外面进行数据库连接释放 /// </summary> /// <param name="connection">SqlConnection数据库连接对象</param> /// <param name="cmdType">Command命令类型,SQL语句还是存储过程</param> /// <param name="cmdText">SQL语句或存储过程名称</param> /// <param name="commandParameters">参数数组</param> /// <returns></returns> public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); object val = cmd.ExecuteScalar(); cmd.Parameters.Clear(); return val; } #endregion #region 以事务执行sql语句列表,public static bool ExecuteTransaction(SqlConnection conn, List<string> cmdTextes, List<SqlParameter[]> commandParameterses) /// <summary> /// 以事务执行sql语句列表,返回事务执行是否成功 /// </summary> /// <param name="conn">数据库连接对象</param> /// <param name="cmdTextes">sql语句列表</param> /// <param name="commandParameterses">sql语句列表对应的参数列表,参数列表必须与sql语句列表匹配</param> /// <returns>事务执行是否成功</returns> public static bool ExecuteTransaction(SqlConnection conn, List<string> cmdTextes, List<SqlParameter[]> commandParameterses) { bool flag = false; if (cmdTextes.Count == commandParameterses.Count) { SqlTransaction sqlTran = conn.BeginTransaction(); try { for (int i = 0; i < cmdTextes.Count; i++) { ExecuteNonQuery(sqlTran, CommandType.Text, cmdTextes[i], commandParameterses[i]); } sqlTran.Commit(); flag = true; } catch (Exception e) { sqlTran.Rollback(); } } return flag; } #endregion #region 以事务执行sql语句列表,返回事务执行是否成功,public static bool ExecuteTransaction(string connectionString, List<string> cmdTextes, List<SqlParameter[]> commandParameterses) /// <summary> /// 以事务执行sql语句列表,返回事务执行是否成功 /// </summary> /// <param name="connectionString">数据库连接字符串</param> /// <param name="cmdTextes">sql语句列表</param> /// <param name="commandParameterses">sql语句列表对应的参数列表,参数列表必须与sql语句列表匹配</param> /// <returns></returns> public static bool ExecuteTransaction(string connectionString, List<string> cmdTextes, List<SqlParameter[]> commandParameterses) { bool flag = false; if (cmdTextes.Count == commandParameterses.Count) { using (SqlConnection conn = new SqlConnection(connectionString)) { SqlTransaction sqlTran = conn.BeginTransaction(); try { for (int i = 0; i < cmdTextes.Count; i++) { ExecuteNonQuery(sqlTran, CommandType.Text, cmdTextes[i], commandParameterses[i]); } sqlTran.Commit(); flag = true; } catch (Exception e) { sqlTran.Rollback(); } } } return flag; } #endregion #region 构造SQLCommand,private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) /// <summary> /// 构造SQLCommand /// </summary> /// <param name="cmd">Command对象</param> /// <param name="conn">SqlConnection数据库连接对象</param> /// <param name="trans">SQL事务</param> /// <param name="cmdType">Command命令类型</param> /// <param name="cmdText">SQL语句或存储过程名称</param> /// <param name="cmdParms">参数数组</param> 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); } } #endregion } }
注意:该类并没有完全封装所有数据对象的使用 ,所以在外面使用类时,也会自行使用SqlConnection、SqlCommand等对象;
可以在 http://download.csdn.net/detail/luxin10/3830325 下载,无需积分
相关文章推荐
- 微软MSDN提供的索引碎片整理脚本
- 证书和签名--试用微软提供的证书测试工具系列
- 微软技术专家互动沙龙,微软官方将提供奖品
- TMS320C6747/C6748源代码/技术文档汇总(国内唯一整理提供)
- 微软提供对汉语拼音的强大升级支持--Microsoft Visual Studio International Pack
- 全新整理:微软、Google等公司的面试题及解答、第61-70题
- 微软提供的三种核心服务:Windows+Office 365+Azure
- 101个微软提供的Visual Studio 2005示例
- 微软面试100题整理
- 抗衡微软高收费 百会提供免费在线Office服务
- 全新整理:微软、谷歌、百度等公司经典面试100题[第101-160题]
- network monitor 抓包软件 微软的 架构师提供的
- 更新整理本人所有博文中提供的代码与工具(C++,2013.08)
- 全新整理:微软、Google等公司非常好的面试题及解答、第161-170题
- 微软同步框架入门之七--定制同步提供程序(SyncProvider)
- 微软Silverlight 4正式发布并提供下载
- 微软将通过Windows Update提供新的杀毒软件
- 微软推DreamSpark计划为学生提供免费软件下载地址
- 此文档为自行整理,非官方提供资料,仅供参考。疏漏之处敬请反馈。
- 微软为AJAX和jQuery类库提供CDN服务