




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/ SqlHelper.cs文件using System;using System.Data;using System.Configuration;using System.Web;using System.Collections;using System.Data.SqlClient;using System.Reflection;/using System.Data.SqlClient.SqlException;namespace HX.SW.DLL.Utilities.DBUtil / / 数据库的通用访问代码 / 此类为抽象类,不允许实例化,在应用时直接调用即可 / public abstract class SqlHelper #region Const / /DB连接串 / private const string XPATH_CONNECTION_STRING = SQLDBCon; #endregion /获取数据库连接字符串,其属于静态变量且只读,项目中所有文档可以直接使用,但不能修改 /public static readonly string ConnectionString = ConfigurationManager.ConnectionStringsConnection String.ConnectionString; public static readonly string ConnectionString = System.Configuration.ConfigurationManager.AppSettingsXPATH_CONNECTION_STRING; / 哈希表用来存储缓存的参数信息,哈希表可以存储任意类型的参数。 private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable(); / /执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。 / 使用参数数组形式提供参数列表 / / / 使用示例: / int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, PublishOrders, new SqlParameter(prodid, 24); / / 一个有效的数据库连接字符串 / SqlCommand命令类型 (存储过程, T-SQL语句, 等等。) / 存储过程的名字或者 T-SQL 语句 / 以数组形式提供SqlCommand命令中用到的参数列表 / 返回一个数值表示此SqlCommand命令执行后影响的行数 public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter commandParameters) SqlCommand cmd = new SqlCommand(); using (SqlConnection conn = new SqlConnection(connectionString) /通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); int val = cmd.ExecuteNonQuery(); /清空SqlCommand中的参数列表 cmd.Parameters.Clear(); return val; / /执行一条不返回结果的SqlCommand,通过一个已经存在的数据库连接 / 使用参数数组提供参数 / / / 使用示例: / int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, PublishOrders, new SqlParameter(prodid, 24); / / 一个现有的数据库连接 / SqlCommand命令类型 (存储过程, T-SQL语句, 等等。) / 存储过程的名字或者 T-SQL 语句 / 以数组形式提供SqlCommand命令中用到的参数列表 / 返回一个数值表示此SqlCommand命令执行后影响的行数 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; / / 执行一条不返回结果的SqlCommand,通过一个已经存在的数据库事物处理 / 使用参数数组提供参数 / / / 使用示例: / int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, PublishOrders, new SqlParameter(prodid, 24); / / 一个存在的 sql 事物处理 / SqlCommand命令类型 (存储过程, T-SQL语句, 等等。) / 存储过程的名字或者 T-SQL 语句 / 以数组形式提供SqlCommand命令中用到的参数列表 / 返回一个数值表示此SqlCommand命令执行后影响的行数 / SqlTransaction trans 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); /insert /insert /int dds = SqlHelper.ExecuteNonQuery(trans.Connection, CommandType.Text, sb.ToString(), null); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return val; / / 执行一条返回结果集的SqlCommand命令,通过专用的连接字符串。 / 使用参数数组提供参数 / / / 使用示例: / SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, PublishOrders, new SqlParameter(prodid, 24); / / 一个有效的数据库连接字符串 / SqlCommand命令类型 (存储过程, T-SQL语句, 等等。) / 存储过程的名字或者 T-SQL 语句 / 以数组形式提供SqlCommand命令中用到的参数列表 / 返回一个包含结果的SqlDataReader public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter commandParameters) SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(connectionString); / 在这里使用try/catch处理是因为如果方法出现异常,则SqlDataReader就不存在, /CommandBehavior.CloseConnection的语句就不会执行,触发的异常由catch捕获。 /关闭数据库连接,并通过throw再次引发捕捉到的异常。 try PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; catch conn.Close(); throw; / / 执行一条返回结果集的SqlCommand命令,通过专用的连接字符串。 / 使用参数数组提供参数 / / / 使用示例: / SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, PublishOrders, new SqlParameter(prodid, 24); / / 一个有效的数据库连接字符串 / SqlCommand命令类型 (存储过程, T-SQL语句, 等等。) / 存储过程的名字或者 T-SQL 语句 / 以数组形式提供SqlCommand命令中用到的参数列表 / 返回一个包含结果的DataTable public static DataTable ExecuteReaderToDataTable(string connectionString, CommandType cmdType, string cmdText, params SqlParameter commandParameters) return ConvertDataReaderToDataTable(ExecuteReader(connectionString, cmdType, cmdText, commandParameters); / / / / / / / / / 查数据用 public static DataSet ExecuteDataset(string connectionString, CommandType cmdType, string cmdText, params SqlParameter commandParameters) /create a command and prepare it for execution SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(connectionString); PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); /create the DataAdapter & DataSet SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); /fill the DataSet using default values for DataTable names, etc. da.Fill(ds); da.Dispose(); / detach the OracleParameters from the command object, so they can be used again. cmd.Parameters.Clear(); cmd.Dispose(); /return the dataset return ds; / / 执行SQL语句,返回影响的记录数 / / SQL语句 / 影响的记录数 public static int ExecuteSql(string SQLString, params SqlParameter cmdParms) using (SqlConnection connection = new SqlConnection(ConnectionString) using (SqlCommand cmd = new SqlCommand() try PrepareCommand(cmd, connection, null,CommandType.Text, SQLString, cmdParms); int rows = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return rows; catch (System.Data.SqlClient.SqlException e) throw e; / / 执行一条返回第一条记录第一列的SqlCommand命令,通过专用的连接字符串。 / 使用参数数组提供参数 / / / 使用示例: / Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, PublishOrders, new SqlParameter(prodid, 24); / / 一个有效的数据库连接字符串 / SqlCommand命令类型 (存储过程, T-SQL语句, 等等。) / 存储过程的名字或者 T-SQL 语句 / 以数组形式提供SqlCommand命令中用到的参数列表 / 返回一个object类型的数据,可以通过 Convert.ToType方法转换类型 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; / / 执行一条返回第一条记录第一列的SqlCommand命令,通过已经存在的数据库连接。 / 使用参数数组提供参数 / / / 使用示例: / Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, PublishOrders, new SqlParameter(prodid, 24); / / 一个已经存在的数据库连接 / SqlCommand命令类型 (存储过程, T-SQL语句, 等等。) / 存储过程的名字或者 T-SQL 语句 / 以数组形式提供SqlCommand命令中用到的参数列表 / 返回一个object类型的数据,可以通过 Convert.ToType方法转换类型 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; / / 缓存参数数组 / / 参数缓存的键值 / 被缓存的参数列表 public static void CacheParameters(string cacheKey, params SqlParameter commandParameters) parmCachecacheKey = commandParameters; / / 获取被缓存的参数 / / 用于查找参数的KEY值 / 返回缓存的参数数组 public static SqlParameter GetCachedParameters(string cacheKey) SqlParameter cachedParms = (SqlParameter)parmCachecacheKey; if (cachedParms = null) return null; /新建一个参数的克隆列表 SqlParameter clonedParms = new SqlParametercachedParms.Length; /通过循环为克隆参数列表赋值 for (int i = 0, j = cachedParms.Length; i j; i+) /使用clone方法复制参数列表中的参数 clonedParmsi = (SqlParameter)(ICloneable)cachedParmsi).Clone(); return clonedParms; / / 为执行命令准备参数 / / SqlCommand 命令 / 已经存在的数据库连接 / 数据库事物处理 / SqlCommand命令类型 (存储过程, T-SQL语句, 等等。) / Command text,T-SQL语句 例如 Select * from Products / 返回带参数的命令 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); / / 开始数据库事务 / / / public static SqlTransaction BeginTransaction(string connectionString) SqlConnection conn = new SqlConnection(connectionString); /判断数据库连接状态 if (conn.State != ConnectionState.Open) conn.Open(); return conn.BeginTransaction(); / / 提交事务 / / public static void CommitTransaction(SqlTransaction transaction) SqlConnection conn = transaction.Connection; transaction.Commit(); conn.Close(); / / 回滚事务 / / public static void RollbackTransaction(SqlTransaction transaction) SqlConnection conn = transaction.Connection; transaction.Rollback(); conn.Close(); public static SqlParameter CreateParameters(object Object) Type type = Object.GetType(); PropertyInfo properties = type.GetProperties(); SqlParameter Parameters = new SqlParameterproperties.Length; for (int i = 0; i properties.Length; i+) PropertyInfo property = (PropertyInfo)propertiesi; Parametersi = new SqlParameter( + property.Name, property.GetValue(Object, null); return Parameters; public static DataTable ConvertDataReaderToDataTable(IDataReader reader) DataTable objDataTable = new DataTable();/创建一个DataTable对象 int intFieldCount = reader.FieldCount; /为DataTable对象添加对应的列字段信息 for (int intCounter = 0; intCounter intFieldCount; +intCounter) objDataTable.Columns.Add(reader.GetName(intCounter), reader.GetFieldType(intCounter); objDataTable.BeginLoadData(); object objValues = new objectintFieldCount; /逐行读取SqlDataReader对象中每一行数据 /并把数据添加到对象dataTable中 while (reader.Read() reader.GetValues(objValues); objDataTable.LoadDataRow(objValues, true); /关闭数据读取器 reader.Close(); objDataTable.EndLoadData(); return objDataTable;/返回一个DataTable对象 / / 用DataTable对象的数据批量更新数据表 / / DataTable对象 / SqlCommand命令类型 (存储过程, T-SQL语句, 等等。) / Command text,T-SQL语句 例如 Select * from Products / 返回带参数的命令 /* = 更新记录 番号更新日期更新者更新内容 00012011/06/17S 新 建 = */ public static int UpdateByDataTable(DataTable table, CommandType cmdType, string cmdText, SqlParameter cmdParms) SqlTransaction trans =null; try if (table = null | table.Rows.Count = 0) return -1; string strConnectionString = Sy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幕墙销售安装合同范本
- 聘请厨房帮工合同范本
- 加盟饭店厨师合同范本
- 与驾校有合同范本
- 商用豆芽销售合同范本
- 合作购买商铺合同范本
- 宾馆摆件租赁合同范本
- 餐饮转让合同范本
- 水利检测的合同范本
- 合同范本印章要求
- 机械通气临床应用指南
- 2025年秋季新学期教学工作会议上校长讲话:我们是不是“跑偏”了
- 2025年计算机一级考试题库(附答案)
- 2025年全国统一高考数学试卷(新高考二卷)试卷与答案
- 人卵母细胞成熟度分级
- 2025年高考真题【地理】试卷含答案(全国新课标卷)
- 2025年四川大学生服务基层项目招募考试(医学基础知识)历年参考题库含答案详解(5套)
- 刑法基本原则课件
- 2025年会议接待考试题库
- 交通事故处理交通事故委托书
- 2025年贵州省中考英语试卷
评论
0/150
提交评论