using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TimedUpload.Util { class SqlHelper { /// /// /// /// XmlConfig 中 database.config 数据库连接key public SqlHelper(string configConnStrKey) { connStr = ConfigurationManager.AppSettings[configConnStrKey]; } //连接字符串 private readonly string connStr; //private static readonly string connStr = ConfigurationManager.ConnectionStrings["PipeNetworkDb"].ConnectionString; ////IP地址 //private static String SqlServerId = Wujian_Jm.C_DesDecrypt(GetConfigValue("SqlServerId"), "WWKJ"); ////用户名 //private static String SqlUserId = Wujian_Jm.C_DesDecrypt(GetConfigValue("SqlUserId"), "WWKJ"); ////用户密码 //private static String PassWord = Wujian_Jm.C_DesDecrypt(GetConfigValue("PassWord"), "WWKJ"); //数据库名 //private static String DbaseName = GetConfigValue("DbaseName"); //拼接链接字符串 // private static readonly string connStrN = "data source=" + SqlServerId + ";initial catalog=" + DbaseName + ";user id=" + SqlUserId + ";password=" + PassWord + ";"; //1.执行insert/delete/update的方法 #region 配置文件字段的读取函数 public string GetConfigValue(string key) { string value = ""; try { //string assemblyConfigFile = Assembly.GetEntryAssembly().Location; //Configuration config = ConfigurationManager.OpenExeConfiguration(assemblyConfigFile); //AppSettingsSection app = config.AppSettings; //value = app.Settings[key].Value; return null; } catch { return value; } } public int ExecuteNonQuery(string sql, CommandType cmdType, params SqlParameter[] pms) { using (SqlConnection con = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql, con)) { //设置当前执行的是存储过程还是带参数的Sql语句 cmd.CommandType = cmdType; if (pms != null) { cmd.Parameters.AddRange(pms); } try { con.Open(); return cmd.ExecuteNonQuery(); } catch { con.Close(); con.Dispose(); throw; } } } } #endregion public int ExecuteNoQuery(string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; if (parameters != null) { conn.Open(); foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } } return cmd.ExecuteNonQuery(); } } } //带事物的执行语句 public int ExecuteNoQueryWithTransaction(string sql, CommandType cmdType, params SqlParameter[] param) { int num = 0; using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); SqlTransaction tran = conn.BeginTransaction(); try { using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.CommandType = cmdType; cmd.Transaction = tran; if (param != null) { cmd.Parameters.AddRange(param); } //conn.Open(); num = cmd.ExecuteNonQuery(); tran.Commit(); //提交事物 } } catch { tran.Rollback(); //事物回滚 } } return num; } //2.执行返回单个值的方法 public object ExecuteScalar(string sql, CommandType cmdType, params SqlParameter[] pms) { ////IP地址 //String SqlServerIP = Wujian_Jm.C_DesDecrypt(GetConfigValue("SqlServerId"), "WWKJ"); ////用户名 //String userId = Wujian_Jm.C_DesDecrypt(GetConfigValue("SqlUserId"), "WWKJ"); ////用户密码 //String pwd = Wujian_Jm.C_DesDecrypt(GetConfigValue("PassWord"), "WWKJ"); ////数据库名 //String dbName = GetConfigValue("DbaseName"); ////拼接链接字符串 //string connStrNew = "data source=" + SqlServerIP + ";initial catalog=" + dbName + ";user id=" + userId + ";password=" + pwd + ";"; using (SqlConnection con = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql, con)) { cmd.Parameters.Clear(); //设置当前执行的是存储过程还是带参数的Sql语句 cmd.CommandType = cmdType; if (pms != null) { cmd.Parameters.AddRange(pms); } con.Open(); Object value = cmd.ExecuteScalar(); cmd.Parameters.Clear(); return value; } } } //3.返回SqlDataReader的方法 public SqlDataReader ExecuteReader(string sql, CommandType cmdType, params SqlParameter[] pms) { SqlConnection con = new SqlConnection(connStr); using (SqlCommand cmd = new SqlCommand(sql, con)) { cmd.CommandType = cmdType; if (pms != null) { cmd.Parameters.AddRange(pms); } try { con.Open(); SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); //修改 刘学铸 by 2017-06-02 cmd.Parameters.Clear(); return dr;//cmd.ExecuteReader(CommandBehavior.CloseConnection); } catch { con.Close(); con.Dispose(); throw; } } } //4.返回DataTable public DataTable ExecuteDataTable(string sql, CommandType cmdType, params SqlParameter[] pms) { try { DataTable dt = new DataTable(); using (SqlDataAdapter adapter = new SqlDataAdapter(sql, connStr)) { //清空参数集合 adapter.SelectCommand.Parameters.Clear(); adapter.SelectCommand.CommandType = cmdType; if (pms != null) { adapter.SelectCommand.Parameters.AddRange(pms); } adapter.Fill(dt); return dt; } } catch (Exception ex) { return null; } } /// /// 执行sql语句无参数 /// public int ExecuteNoParams(string sql, CommandType cmdType) { using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.CommandType = cmdType; try { conn.Open(); return cmd.ExecuteNonQuery(); } catch (Exception) { conn.Close(); throw; } } } } /// /// 判断表是否存在 /// /// /// public bool DBTableIsExists(string tableName) { return ExecuteDataTable("select * from sysobjects where name='" + tableName + "'", CommandType.Text, null).Rows.Count > 0; } /// /// 带事务的存储过程 /// /// 存储过程名称 /// 存储过程参数-不能为空 /// 0:执行成功 异常抛出 public int ExecStoredProcedure(string procName, params SqlParameter[] parameters) { int rtn = 0; using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = conn.CreateCommand()) { SqlTransaction st = conn.BeginTransaction(); cmd.Transaction = st; try { cmd.CommandText = procName; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddRange(parameters); conn.Open(); rtn = cmd.ExecuteNonQuery(); st.Commit(); cmd.Parameters.Clear();//修改 刘学铸 at 2017-07-13 return rtn; } catch (SqlException sqlex) { st.Rollback(); throw sqlex; } } } } /// /// 带输出参数的存储过程 /// /// /// /// public object ExecStoredPro(string procName, string name, params SqlParameter[] paras) { int rtn = 0; using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = conn.CreateCommand()) { SqlTransaction st = conn.BeginTransaction(); cmd.Transaction = st; try { cmd.CommandText = procName; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddRange(paras); conn.Open(); rtn = cmd.ExecuteNonQuery(); st.Commit(); return cmd.Parameters[name].Value; //返回输出参数 } catch (SqlException sqlex) { st.Rollback(); throw sqlex; } //finally //{ // cmd.Parameters.Clear();//修改 刘学铸 at 2017-07-13 //} } } } /// /// 带输出参数的存储过程 /// /// /// /// public void ExecStoredPro1(string procName, params SqlParameter[] paras) { int rtn = 0; using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = conn.CreateCommand()) { //SqlTransaction st = conn.BeginTransaction(); //cmd.Transaction = st; try { cmd.CommandText = procName; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddRange(paras); conn.Open(); rtn = cmd.ExecuteNonQuery(); //st.Commit(); //return cmd.Parameters[name].Value; //返回输出参数 } catch (SqlException sqlex) { //st.Rollback(); throw sqlex; } finally { cmd.Parameters.Clear();//修改 刘学铸 at 2017-07-13 if (conn != null) conn.Close(); } } } } /// /// 存储过程返回DataTable /// /// /// /// public DataTable ExecProcedureDatatable(string procName, params SqlParameter[] paras) { DataTable dt = new DataTable(); using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = conn.CreateCommand()) { SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = cmd; cmd.CommandText = procName; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Clear(); if (paras != null) { foreach (SqlParameter parameter in paras) { cmd.Parameters.Add(parameter); } } conn.Open(); try { //执行 adapter.Fill(dt); } catch (System.Data.Common.DbException ex) { //PublicUtility.HandException("DbBase.cs", ex); } finally { //关闭连接 cmd.Parameters.Clear(); if (conn != null) conn.Close(); } //return dt; } } return dt; } /// /// 分页查询 /// /// 查询sql /// 查询参数 /// 排序字段 /// 排序方式 /// 显示的页数 /// 当前页数 /// 总共条数 /// public DataTable ExecuteDataTable(string strSql, string orderField, bool isAsc, int pageSize, int pageIndex, out int total, params SqlParameter[] parameter) { using (SqlConnection dbConnection = new SqlConnection(connStr)) { StringBuilder sb = new StringBuilder(); if (pageIndex == 0) { pageIndex = 1; } int num = (pageIndex - 1) * pageSize; int num1 = (pageIndex) * pageSize; string OrderBy = ""; if (!string.IsNullOrEmpty(orderField)) { if (orderField.ToUpper().IndexOf("ASC") + orderField.ToUpper().IndexOf("DESC") > 0) { //OrderBy = "Order By " + orderField ; OrderBy = "Order By " + orderField; } else { //OrderBy = "Order By " + orderField + " " + (isAsc ? "ASC" : "DESC"); OrderBy = "Order By " + orderField + " " + (isAsc ? "ASC" : "DESC"); } } else { OrderBy = "order by (select 0)"; } sb.Append("Select * From (Select ROW_NUMBER() Over (" + OrderBy + ")"); sb.Append(" As rowNum, * From (" + strSql + ") As T ) As N Where rowNum > " + num + " And rowNum <= " + num1 + ""); total = Convert.ToInt32(ExecuteScalar("Select Count(1) From (" + strSql + ") As t", CommandType.Text, parameter)); //total = Convert.ToInt32(new DbHelper(dbConnection).ExecuteScalar(CommandType.Text, "Select Count(1) From (" + strSql + ") As t", dbParameter)); //var IDataReader = new DbHelper(dbConnection).ExecuteReader(CommandType.Text, sb.ToString(), dbParameter); //return ConvertExtension.IDataReaderToList(IDataReader); return ExecuteDataTable(sb.ToString(), CommandType.Text, parameter); } } /// /// 分页查询 /// /// 查询sql /// 查询参数 /// 排序字段 /// 排序方式 /// 每页行数 /// 当前页数 /// 总共条数 /// public DataTable ExecuteDataTable(string strSql, string orderField, string isAsc, int pageSize, int pageIndex, out int total, params SqlParameter[] parameter) { using (SqlConnection dbConnection = new SqlConnection(connStr)) { StringBuilder sb = new StringBuilder(); if (pageIndex == 0) { pageIndex = 1; } int num = (pageIndex - 1) * pageSize; int num1 = (pageIndex) * pageSize; string OrderBy = ""; if (!string.IsNullOrEmpty(orderField)) { if (orderField.ToUpper().IndexOf("ASC") + orderField.ToUpper().IndexOf("DESC") > 0) { OrderBy = "Order By " + orderField; } else { OrderBy = "Order By " + orderField + " " + isAsc; } } else { OrderBy = "order by (select 0)"; } sb.Append("Select * From (Select ROW_NUMBER() Over (" + OrderBy + ")"); sb.Append(" As rowNum, * From (" + strSql + ") As T ) As N Where rowNum > " + num + " And rowNum <= " + num1 + ""); total = Convert.ToInt32(ExecuteScalar("Select Count(1) From (" + strSql + ") As t", CommandType.Text, parameter)); //total = Convert.ToInt32(new DbHelper(dbConnection).ExecuteScalar(CommandType.Text, "Select Count(1) From (" + strSql + ") As t", dbParameter)); //var IDataReader = new DbHelper(dbConnection).ExecuteReader(CommandType.Text, sb.ToString(), dbParameter); //return ConvertExtension.IDataReaderToList(IDataReader); return ExecuteDataTable(sb.ToString(), CommandType.Text, parameter); } } #region 返回 sqlDataReader public SqlDataReader ReturnSqlDataReader(String sql) { SqlConnection conn = new SqlConnection(connStr); SqlCommand cmd = new SqlCommand(sql, conn); conn.Open(); try { SqlDataReader reader = cmd.ExecuteReader(); return reader; } catch (Exception ex) { conn.Close(); throw ex; } } #endregion public int ScalarToInt(string sql) { return Convert.ToInt32(ExecuteScalar(sql, CommandType.Text, null)); } public int Query(string sql) { return ExecuteNonQuery(sql, CommandType.Text, null); } public DataTable ExecuteDataTable(String sql) { return this.ExecuteDataTable(sql, CommandType.Text, null); } public Int32 QueryTran(String sql) { Int32 num = 0; using (SqlConnection con = new SqlConnection(connStr)) { using (SqlCommand cmd = con.CreateCommand()) { con.Open(); SqlTransaction st = con.BeginTransaction(); cmd.Transaction = st; //设置当前执行的是存储过程还是带参数的Sql语句 cmd.CommandText = sql; cmd.CommandType = CommandType.Text; try { num = cmd.ExecuteNonQuery(); st.Commit(); } catch { st.Rollback(); con.Close(); con.Dispose(); } } } return num; } } }