using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Web; using System.Data.SqlClient; using System.Configuration; using System.Diagnostics; namespace XXX.XXX { /// <summary> /// 页面名 :数据库操作类<br/> /// 说明 :<br/> /// 作者 :niu<br/> /// 创建时间:2011-12-13<br/> /// 最后修改:<br/> /// </summary> public class SqlServerHelper { private static readonly string connectionString = "server=.;uid=sa;pwd=******;database=XXX"; #region AddInParameter 添加输入参数 /// <summary> /// 添加In参数 /// </summary> /// <param name="paramName">参数名</param> /// <param name="value">值</param> /// <returns>返回一个SqlParameter对象</returns> public static SqlParameter AddInParameter(string paramName, object value) { SqlParameter param = new SqlParameter(paramName, value); return param; } /// <summary> /// 添加In参数 /// </summary> /// <param name="paramName">参数名</param> /// <param name="dbType">数据类型</param> /// <param name="value">值</param> /// <returns>返回一个SqlParameter对象</returns> public static SqlParameter AddInParameter(string paramName, SqlDbType dbType, object value) { return AddInParameter(paramName, dbType, 0, value); } /// <summary> /// 添加In参数 /// </summary> /// <param name="paramName">参数名</param> /// <param name="dbType">数据类型</param> /// <param name="size">字段大小</param> /// <param name="value">值</param> /// <returns>返回一个SqlParameter对象</returns> public static SqlParameter AddInParameter(string paramName, SqlDbType dbType, int size, object value) { SqlParameter param; if (size > 0) param = new SqlParameter(paramName, dbType, size); else param = new SqlParameter(paramName, dbType); param.Value = value; return param; } #endregion #region AddOutParameter 添加输出参数 /// <summary> /// 添加Out参数 /// </summary> /// <param name="paramName">参数名</param> /// <param name="dbType">数据类型</param> /// <returns>返回一个SqlParameter对象</returns> public static SqlParameter AddOutParameter(string paramName, SqlDbType dbType) { return AddOutParameter(paramName, dbType, 0, null); } /// <summary> /// 添加Out参数 /// </summary> /// <param name="paramName">参数名</param> /// <param name="dbType">数据类型</param> /// <param name="size">字段大小</param> /// <returns>返回一个SqlParameter对象</returns> public static SqlParameter AddOutParameter(string paramName, SqlDbType dbType, int size) { return AddOutParameter(paramName, dbType, size, null); } public static SqlParameter AddOutParameter(string paramName, SqlDbType dbType, int size, object value) { SqlParameter param; if (size > 0) { param = new SqlParameter(paramName, dbType, size); } else { param = new SqlParameter(paramName, dbType); } if (value != null) { param.Value = value; } param.Direction = ParameterDirection.Output; return param; } #endregion #region PrepareCommand private static void PrepareCommand(SqlConnection conn, SqlCommand cmd, CommandType cmdType, string cmdText, int timeout, SqlParameter[] cmdParms) { cmd.Connection = conn; cmd.CommandText = cmdText; cmd.CommandType = cmdType; if (timeout > 30) cmd.CommandTimeout = timeout; if (cmdParms != null) { foreach (SqlParameter parm in cmdParms) { if ((parm.Direction == ParameterDirection.InputOutput || parm.Direction == ParameterDirection.Input) && (parm.Value == null)) { parm.Value = DBNull.Value; } cmd.Parameters.Add(parm); } } if (conn.State != ConnectionState.Open) { try { conn.Open(); } catch { } } } private static void PrepareCommand(SqlConnection conn, SqlCommand cmd, CommandType cmdType, string cmdText, int timeout, List<SqlParameter> cmdParms) { cmd.Connection = conn; cmd.CommandText = cmdText; cmd.CommandType = cmdType; if (timeout > 30) cmd.CommandTimeout = timeout; if (cmdParms != null) { foreach (SqlParameter parm in cmdParms) { if ((parm.Direction == ParameterDirection.InputOutput || parm.Direction == ParameterDirection.Input) && (parm.Value == null)) { parm.Value = DBNull.Value; } cmd.Parameters.Add(parm); } } if (conn.State != ConnectionState.Open) { try { conn.Open(); } catch { } } } #endregion #region ConnClose 关闭数据库连接 private static void ConnClose(SqlConnection conn) { if (conn!=null && conn.State == System.Data.ConnectionState.Open) { conn.Close(); } } #endregion #region 直接返回Model public static T ExecuteModel<T>(string cmdText, params SqlParameter[] cmdParms) where T : new() { return ExecuteModel<T>(cmdText, CommandType.Text, 30, cmdParms); } public static T ExecuteModel<T>(string cmdText, List<SqlParameter> cmdParms) where T : new() { return ExecuteModel<T>(cmdText, CommandType.Text, 30, cmdParms); } public static T ExecuteModel<T>(string cmdText) where T : new() { return ExecuteModel<T>(cmdText, CommandType.Text, 30, new List<SqlParameter>()); } public static T ExecuteModel<T>(string cmdText, CommandType cmdType, int timeOut, params SqlParameter[] cmdParms) where T : new() { try { DataTable t = ExecuteDataTable(cmdText, cmdType, timeOut, cmdParms); if (t.Rows.Count > 0) { return DataConvert.DataRowToModel<T>(t.Rows[0]); } else { return default(T); } } catch (Exception ex) { /*使用 default 关键字,此关键字对于引用类型会返回空,对于数值类型会返回零。对于结构, * 此关键字将返回初始化为零或空的每个结构成员,具体取决于这些结构是值类型还是引用类型*/ return default(T); } } public static T ExecuteModel<T>(string cmdText, CommandType cmdType, int timeOut, List<SqlParameter> cmdParms) where T : new() { try { DataTable t = ExecuteDataTable(cmdText, cmdType, timeOut, cmdParms); if (t.Rows.Count > 0) { return DataConvert.DataRowToModel<T>(t.Rows[0]); } else { return default(T); } } catch (Exception ex) { return default(T); } } #endregion #region 直接返回IList public static IList<T> ExecuteIList<T>(string cmdText, params SqlParameter[] cmdParms) where T : new() { return ExecuteIList<T>(cmdText, CommandType.Text, 30, cmdParms); } public static IList<T> ExecuteIList<T>(string cmdText, List<SqlParameter> cmdParms) where T : new() { return ExecuteIList<T>(cmdText, CommandType.Text, 30, cmdParms); } public static IList<T> ExecuteIList<T>(string cmdText) where T : new() { return ExecuteIList<T>(cmdText, CommandType.Text, 30, new List<SqlParameter>()); } public static IList<T> ExecuteIList<T>(string cmdText, CommandType cmdType, int timeOut, params SqlParameter[] cmdParms) where T : new() { try { DataTable t = ExecuteDataTable(cmdText, cmdType, timeOut, cmdParms); if (t.Rows.Count > 0) { return DataConvert.DataTableToList<T>(t); } else { return new List<T>(); } } catch (Exception ex) { return new List<T>(); } } public static IList<T> ExecuteIList<T>(string cmdText, CommandType cmdType, int timeOut, List<SqlParameter> cmdParms) where T : new() { try { DataTable t = ExecuteDataTable(cmdText, cmdType, timeOut, cmdParms); if (t.Rows.Count > 0) { return DataConvert.DataTableToList<T>(t); } else { return new List<T>(); } } catch (Exception ex) { return new List<T>(); } } #endregion #region 返回DataTable,DataSet,执行更新 /// <summary> /// 标量查询,返回查询结果集中第一行的第一列。 /// </summary> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="timeOut">超时时间</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>返回值</returns> public static object ExecuteScalar(string cmdText, CommandType cmdType, int timeOut, params SqlParameter[] cmdParms) { using (SqlConnection myConn = new SqlConnection(connectionString)) { using (SqlCommand myCmd = new SqlCommand()) { object retval = null; try { PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms); retval = myCmd.ExecuteScalar(); } catch (Exception ex) { return null; } finally { if (cmdParms != null) { myCmd.Parameters.Clear(); } myCmd.Dispose(); ConnClose(myConn); } return retval; } } } /// <summary> /// 创建DataTable /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="timeOut">超时时间</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>DataTable 对象。</returns> public static DataTable ExecuteDataTable(string cmdText, CommandType cmdType, int timeOut, params SqlParameter[] cmdParms) { using (SqlConnection myConn = new SqlConnection(connectionString)) { using (SqlCommand myCmd = new SqlCommand()) { SqlDataAdapter myda = null; DataTable dt = new DataTable(); try { PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms); myda = new SqlDataAdapter(myCmd); myda.Fill(dt); } catch (Exception ex) { return new DataTable(); } finally { if (cmdParms != null) { myCmd.Parameters.Clear(); } myCmd.Dispose(); myda.Dispose(); ConnClose(myConn); } return dt; } } } /// <summary> /// 创建DataSet /// </summary> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="timeOut">超时时间</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>DataSet 对象。</returns> public static DataSet ExecuteDataSet(string cmdText, CommandType cmdType, int timeOut, params SqlParameter[] cmdParms) { using (SqlConnection myConn = new SqlConnection(connectionString)) { using (SqlCommand myCmd = new SqlCommand()) { SqlDataAdapter myda = null; DataSet ds = new DataSet(); try { PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms); myda = new SqlDataAdapter(myCmd); myda.Fill(ds); } catch (Exception ex) { return new DataSet(); } finally { if (cmdParms != null) { myCmd.Parameters.Clear(); } myCmd.Dispose(); myda.Dispose(); ConnClose(myConn); } return ds; } } } /// <summary> /// 创建DataTable /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="timeOut">超时时间</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>DataTable 对象。</returns> public static DataTable ExecuteDataTable(string cmdText, CommandType cmdType, int timeOut, List<SqlParameter> cmdParms) { using (SqlConnection myConn = new SqlConnection(connectionString)) { using (SqlCommand myCmd = new SqlCommand()) { SqlDataAdapter myda = null; DataTable dt = new DataTable(); try { PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms); myda = new SqlDataAdapter(myCmd); myda.Fill(dt); } catch (Exception ex) { return new DataTable(); } finally { if (cmdParms != null) { myCmd.Parameters.Clear(); } myCmd.Dispose(); myda.Dispose(); ConnClose(myConn); } return dt; } } } #endregion #region 快捷方法 #region ExecuteDataTable 创建DataTable public static DataTable ExecuteDataTable(string cmdText) { return ExecuteDataTable(cmdText, CommandType.Text, 30, new List<SqlParameter>()); } public static DataTable ExecuteDataTable(string cmdText, List<SqlParameter> cmdParms) { return ExecuteDataTable(cmdText, CommandType.Text, 30, cmdParms); } /// <summary> /// 创建DataTable /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>DataTable 对象。</returns> public static DataTable ExecuteDataTable(string cmdText, params SqlParameter[] cmdParms) { return ExecuteDataTable(cmdText, CommandType.Text, 60, cmdParms); } /// <summary> /// 创建DataTable /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程</param> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns> DataTable 对象。</returns> public static DataTable ExecuteDataTable(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms) { return ExecuteDataTable(cmdText, cmdType, 60, cmdParms); } /// <summary> /// 创建DataTable /// </summary> /// <param name="ConnectionString">数据库连接字符串</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>DataTable 对象。</returns> public static DataTable ExecuteDataTable(string ConnectionString, string cmdText, params SqlParameter[] cmdParms) { return ExecuteDataTable(ConnectionString, cmdText, CommandType.Text, cmdParms); } /// <summary> /// 创建DataTable /// </summary> /// <param name="ConnectionString">数据库连接字符串</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>DataTable 对象。</returns> public static DataTable ExecuteDataTable(string ConnectionString, string cmdText, CommandType cmdType, params SqlParameter[] cmdParms) { using (SqlConnection myConn = new SqlConnection(ConnectionString)) { using (SqlCommand myCmd = new SqlCommand()) { SqlDataAdapter myda = null; DataTable dt = new DataTable(); try { PrepareCommand(myConn, myCmd, cmdType, cmdText, 60, cmdParms); myda = new SqlDataAdapter(myCmd); myda.Fill(dt); } catch (Exception ex) { throw new Exception(ex.Message); } finally { if (cmdParms != null) { myCmd.Parameters.Clear(); } myCmd.Dispose(); myda.Dispose(); ConnClose(myConn); } return dt; } } } #endregion #region ExecuteDataRow 返回一行数据 public static DataRow ExecuteDataRow(string cmdText) { return ExecuteDataRow(cmdText, CommandType.Text, 30, new List<SqlParameter>()); } public static DataRow ExecuteDataRow(string cmdText, List<SqlParameter> cmdParms) { return ExecuteDataRow(cmdText, CommandType.Text, 30, cmdParms); } /// <summary> /// DataRow /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>DataTable 对象。</returns> public static DataRow ExecuteDataRow(string cmdText, params SqlParameter[] cmdParms) { return ExecuteDataRow(cmdText, CommandType.Text, 60, cmdParms); } /// <summary> /// 创建DataTable /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程</param> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns> DataTable 对象。</returns> public static DataRow ExecuteDataRow(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms) { return ExecuteDataRow(cmdText, cmdType, 60, cmdParms); } /// <summary> /// DataRow /// </summary> /// <param name="ConnectionString">数据库连接字符串</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>DataTable 对象。</returns> public static DataRow ExecuteDataRow(string ConnectionString, string cmdText, params SqlParameter[] cmdParms) { return ExecuteDataRow(ConnectionString, cmdText, CommandType.Text, cmdParms); } /// <summary> /// DataRow /// </summary> /// <param name="ConnectionString">数据库连接字符串</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>DataTable 对象。</returns> public static DataRow ExecuteDataRow(string ConnectionString, string cmdText, CommandType cmdType, params SqlParameter[] cmdParms) { DataTable table = ExecuteDataTable(ConnectionString, cmdText, cmdType, cmdParms); if (table != null) { if (table.Rows.Count > 0) { return table.Rows[0]; } } return null; } /// <summary> /// 返回DataRow /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="timeOut">超时时间</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>DataTable 对象。</returns> public static DataRow ExecuteDataRow(string cmdText, CommandType cmdType, int timeOut, List<SqlParameter> cmdParms) { DataTable table = ExecuteDataTable( cmdText, cmdType, timeOut, cmdParms); if (table != null) { if (table.Rows.Count > 0) { return table.Rows[0]; } } return null; } /// <summary> /// DataRow /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="timeOut">超时时间</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>DataTable 对象。</returns> public static DataRow ExecuteDataRow(string cmdText, CommandType cmdType, int timeOut, params SqlParameter[] cmdParms) { DataTable table = ExecuteDataTable(cmdText, cmdType, timeOut, cmdParms); if (table != null) { if (table.Rows.Count > 0) { return table.Rows[0]; } } return null; } #endregion #region ExecuteNonQuery public static int ExecuteNonQueryStoredProcedure(string cmdText, params SqlParameter[] cmdParms) { return ExecuteNonQuery(cmdText, CommandType.StoredProcedure, 30, cmdParms); } public static int ExecuteNonQuery(string cmdText, List<SqlParameter> cmdParms) { return ExecuteNonQuery(cmdText, CommandType.Text, 30, cmdParms); } public static int ExecuteNonQuery(string cmdText) { return ExecuteNonQuery(cmdText, CommandType.Text, 30, new List<SqlParameter>()); } /// <summary> /// 对连接对象执行 SQL 语句。 /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>返回受影响的行数。</returns> public static int ExecuteNonQuery(string cmdText, params SqlParameter[] cmdParms) { return ExecuteNonQuery(cmdText, CommandType.Text, 60, cmdParms); } /// <summary> /// 对连接对象执行 SQL 语句。 /// </summary> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>返回受影响的行数。</returns> public static int ExecuteNonQuery(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms) { return ExecuteNonQuery(cmdText, cmdType, 60, cmdParms); } /// <summary> /// 对连接对象执行 SQL 语句。 /// </summary> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="timeOut">超时时间</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>返回受影响的行数。</returns> public static int ExecuteNonQuery(string cmdText, CommandType cmdType, int timeOut, List<SqlParameter> cmdParms) { using (SqlConnection myConn = new SqlConnection(connectionString)) { using (SqlCommand myCmd = new SqlCommand()) { int retval = 0; try { PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms); retval = myCmd.ExecuteNonQuery(); } catch (Exception ex) { return 0; } finally { if (cmdParms != null) { myCmd.Parameters.Clear(); } myCmd.Dispose(); ConnClose(myConn); } return retval; } } } /// <summary> /// 对连接对象执行 SQL 语句。 /// </summary> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="timeOut">超时时间</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>返回受影响的行数。</returns> public static int ExecuteNonQuery(string cmdText, CommandType cmdType, int timeOut, params SqlParameter[] cmdParms) { using (SqlConnection myConn = new SqlConnection(connectionString)) { using (SqlCommand myCmd = new SqlCommand()) { int retval = 0; try { PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms); retval = myCmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; return 0; } finally { if (cmdParms != null) { myCmd.Parameters.Clear(); } myCmd.Dispose(); ConnClose(myConn); } return retval; } } } #endregion #region ExecuteDataSet 创建DataSet /// <summary> /// 创建DataSet /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns> DataSet 对象。</returns> public static DataSet ExecuteDataSet(string cmdText, params SqlParameter[] cmdParms) { return ExecuteDataSet(cmdText, CommandType.Text, 60, cmdParms); } /// <summary> /// 创建DataSet /// </summary> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdText">设Transact-SQL 语句或存储过程。</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns> DataSet 对象。</returns> public static DataSet ExecuteDataSet(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms) { return ExecuteDataSet(cmdText, cmdType, 60, cmdParms); } #endregion #region ExecuteDataReader 创建SqlDataReader /// <summary> /// 创建 SqlDataReader。 /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns> SqlDataReader 对象。</returns> public static SqlDataReader ExecuteDataReader(string cmdText, params SqlParameter[] cmdParms) { return ExecuteDataReader(cmdText, CommandType.Text, 60, cmdParms); } /// <summary> /// 创建 SqlDataReader。 /// </summary> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>一个 SqlDataReader 对象。</returns> public static SqlDataReader ExecuteDataReader(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms) { return ExecuteDataReader(cmdText, cmdType, 60, cmdParms); } /// <summary> /// 创建 SqlDataReader。 /// </summary> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="timeOut">超时时间</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>一个 SqlDataReader 对象。</returns> public static SqlDataReader ExecuteDataReader(string cmdText, CommandType cmdType, int timeOut, params SqlParameter[] cmdParms) { SqlConnection myConn = new SqlConnection(connectionString); SqlCommand myCmd = new SqlCommand(); SqlDataReader dr = null; try { PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms); dr = myCmd.ExecuteReader(CommandBehavior.CloseConnection); } catch (Exception ex) { ConnClose(myConn); throw new Exception(ex.Message); } finally { if (cmdParms != null) { myCmd.Parameters.Clear(); } } return dr; } #endregion #region ExecuteNonQueryTran 执行带事务的批量SQL语句 public static int ExecuteNonQueryTranStoredProcedure(string cmdText, params SqlParameter[] cmdParms) { return ExecuteNonQueryTran(cmdText, CommandType.StoredProcedure, 30, cmdParms); } public static int ExecuteNonQueryTran(string cmdText, List<SqlParameter> cmdParms) { return ExecuteNonQueryTran(cmdText, CommandType.Text, 30, cmdParms); } public static int ExecuteNonQueryTran(string cmdText) { return ExecuteNonQueryTran(cmdText, CommandType.Text, 30, new List<SqlParameter>()); } /// <summary> /// 对连接对象执行 SQL 语句。 /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>返回受影响的行数。</returns> public static int ExecuteNonQueryTran(string cmdText, params SqlParameter[] cmdParms) { return ExecuteNonQueryTran(cmdText, CommandType.Text, 60, cmdParms); } /// <summary> /// 对连接对象执行 SQL 语句。 /// </summary> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>返回受影响的行数。</returns> public static int ExecuteNonQueryTran(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms) { return ExecuteNonQueryTran(cmdText, cmdType, 60, cmdParms); } /// <summary> /// 对连接对象执行 SQL 语句。 /// </summary> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="timeOut">超时时间</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>返回受影响的行数。</returns> public static int ExecuteNonQueryTran(string cmdText, CommandType cmdType, int timeOut, List<SqlParameter> cmdParms) { using (SqlConnection myConn = new SqlConnection(connectionString)) { myConn.Open(); SqlTransaction tran = myConn.BeginTransaction(); using (SqlCommand myCmd = new SqlCommand()) { int retval = 0; try { PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms); myCmd.Transaction = tran; retval = myCmd.ExecuteNonQuery(); tran.Commit(); } catch (Exception ex) { tran.Rollback(); return 0; } finally { if (cmdParms != null) { myCmd.Parameters.Clear(); } tran.Dispose(); myCmd.Dispose(); ConnClose(myConn); } return retval; } } } /// <summary> /// 对连接对象执行 SQL 语句。 /// </summary> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="timeOut">超时时间</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>返回受影响的行数。</returns> public static int ExecuteNonQueryTran(string cmdText, CommandType cmdType, int timeOut, params SqlParameter[] cmdParms) { using (SqlConnection myConn = new SqlConnection(connectionString)) { myConn.Open(); SqlTransaction tran = myConn.BeginTransaction(); using (SqlCommand myCmd = new SqlCommand()) { int retval = 0; try { PrepareCommand(myConn, myCmd, cmdType, cmdText, timeOut, cmdParms); myCmd.Transaction = tran; retval = myCmd.ExecuteNonQuery(); tran.Commit(); } catch (Exception ex) { tran.Rollback(); return 0; } finally { if (cmdParms != null) { myCmd.Parameters.Clear(); } tran.Dispose(); myCmd.Dispose(); ConnClose(myConn); } return retval; } } } #endregion #region ExecuteScalar 执行标量查询 /// <summary> /// 标量查询,返回查询结果集中第一行的第一列。 /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>返回值</returns> public static Object ExecuteScalar(string cmdText, params SqlParameter[] cmdParms) { return ExecuteScalar(cmdText, CommandType.Text, 60, cmdParms); } /// <summary> /// 标量查询,返回查询结果集中第一行的第一列。 /// </summary> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>返回值</returns> public static int ExecuteScalar<Int32>(string cmdText, params SqlParameter[] cmdParms) { object obj= ExecuteScalar(cmdText, CommandType.Text, 60, cmdParms); int result = -1; if (obj != null) { int.TryParse(obj.ToString(), out result); } return result; } /// <summary> /// 标量查询,返回查询结果集中第一行的第一列。 /// </summary> /// <param name="cmdType">该值指示如何解释 CommandText 属性</param> /// <param name="cmdText">Transact-SQL 语句或存储过程。</param> /// <param name="cmdParms">参数列表,params变长数组的形式</param> /// <returns>返回值</returns> public static Object ExecuteScalar(string cmdText, CommandType cmdType, params SqlParameter[] cmdParms) { return ExecuteScalar(cmdText, cmdType, 60, cmdParms); } #endregion #region ExecuteBulkInsert 批量插入数据 public static int ExecuteBulkInsert(DataTable t) { try { SqlBulkCopy bulk = new SqlBulkCopy(connectionString); bulk.BatchSize = t.Rows.Count; bulk.DestinationTableName = t.TableName; bulk.WriteToServer(t); return t.Rows.Count; } catch { return 0; } } #endregion #region getMaxID public static int getMaxID(string fieldName, string tableName) { string sql = "select max("+fieldName+") from "+tableName; object obj= ExecuteScalar(sql); int maxId = -1; if (obj != null) { int.TryParse(obj.ToString(), out maxId); } return maxId; } #endregion #endregion #region 返回分页列表 public static DataTable getList(TableEnum tableName, string getFields, string OrderField, string whereCondition, int pageSize, int pageIndex, ref int recordCount) { try { int startIndex = pageSize * (pageIndex - 1); string sql = "select " + getFields + " from [" + Enum.GetName(typeof(TableEnum), tableName)+"]"; if (!string.IsNullOrEmpty(whereCondition)) { sql += " where " + whereCondition; } string sqlCount = "select count(1) from (" + sql + ") T"; sql += " order by " + OrderField;// +" limit " + startIndex + "," + pageSize;//跳过多少条,选择多少条, /* 如果我要去11-20的Account表的数据 Select * From Account Limit 9 Offset 10; * 以上语句表示从Account表获取数据,跳过10行,取9行嗯, * 也可以这样写 select * from account limit 10,9和上面的的效果一样。 通用公试: * sql = "select * from FlyCrocodile where "+条件+" order by "+排序+" limit "+要显示多少条记录+" offset "+跳过多少条记录; * 如: select * from flycrocodile limit 15 offset 20 * 意思是说: 从flycrocodile表跳过20条记录选出15条记录 */ object obj = ExecuteScalar(sqlCount); DataTable table = new DataTable(); int total = 0; if (obj != null) { if (int.TryParse(obj.ToString(), out total)) { table= ExecuteDataTable(sql); } } recordCount = total; return table; } catch (Exception ex) { recordCount = 0; return new DataTable(); } } public static IList<T> ExecuteIList<T>(TableEnum tableName, string getFields, string OrderField, string whereCondition, int pageSize, int pageIndex, ref int recordCount) where T : new() { DataTable table=getList( tableName, getFields, OrderField, whereCondition, pageSize, pageIndex, ref recordCount); return DataConvert.DataTableToList<T>(table); } public static DataTable getList(string cmdText, int pageSize, int pageIndex, ref int recordCount) { try { int startIndex = pageSize * (pageIndex - 1); string sqlCount = "select count(1) from (" + cmdText + ")"; object obj = ExecuteScalar(sqlCount); DataTable table = new DataTable(); int total = 0; if (obj != null) { if (int.TryParse(obj.ToString(), out total)) { table = ExecuteDataTable(cmdText); } } recordCount = total; return table; } catch (Exception ex) { recordCount = 0; return new DataTable(); } } public static DataTable FY(string cmdText, int pageSize, int pageIndex,string OrderField, ref int recordCount) { try { string sqlCount = "select count(1) from (" + cmdText + ")"; cmdText = "select * from (select top " + pageSize + " * from (select top " + pageSize * pageIndex + " * from (" + cmdText + ") tmp order by " + OrderField + " desc) order by " + OrderField + ") order by " + OrderField + " desc"; object obj = ExecuteScalar(sqlCount); DataTable table = new DataTable(); int total = 0; if (obj != null) { if (int.TryParse(obj.ToString(), out total)) { table = ExecuteDataTable(cmdText); } } recordCount = total; return table; } catch (Exception ex) { recordCount = 0; return new DataTable(); } } #endregion } public enum TableEnum { } }