using System; using System.Configuration; using System.Data; using System.Data.SqlClient; namespace WX.CRM.DAL { public class SqlHelper { #region 连接字符串 private static string GetConnection(string connectionKey) { return ConfigurationManager.ConnectionStrings[connectionKey].ConnectionString; } public enum DatabaseType { AYCRM, WeWork, BC, Promotion,//推广数据库 Promotion2,//推广数据2 PromotionEntity,//推广pubsh AYResourceSystem, AYCompassSSO, Future, SmsSystem, FuturesCusTran, SilverAYCRM, SilverFutures, IPSC }; /// /// 获取连接字符串 /// /// /// public static string GetConnecionString(DatabaseType dbType) { string strConn = null; switch (dbType) { case DatabaseType.Promotion: strConn = GetConnection("PromotionConn"); break; case DatabaseType.Promotion2: strConn = GetConnection("PromotionConn2"); break; case DatabaseType.AYCRM: strConn = GetConnection("AYCRMConn"); break; case DatabaseType.PromotionEntity: strConn = GetConnection("Entities"); break; case DatabaseType.BC: strConn = GetConnection("BCConn"); break; case DatabaseType.AYResourceSystem: strConn = GetConnection("AYResourceSystemConn"); break; case DatabaseType.AYCompassSSO: strConn = GetConnection("AYCompassSSOConn"); break; case DatabaseType.Future: strConn = GetConnection("FutureConn"); break; case DatabaseType.SmsSystem: strConn = GetConnection("SmsSystemConn"); break; case DatabaseType.FuturesCusTran: strConn = GetConnection("FuturesCusTranConn"); break; case DatabaseType.SilverAYCRM: strConn = GetConnection("SilverAYCRMConn"); break; case DatabaseType.SilverFutures: strConn = GetConnection("SilverFutureConn"); break; case DatabaseType.IPSC: strConn = GetConnection("IPSCConn"); break; case DatabaseType.WeWork: strConn = GetConnection("WeWork"); break; } return strConn; } #endregion #region 获取Dataset public static DataSet GetDataSet(DatabaseType dbType, string sql, CommandType type, params SqlParameter[] parameters) { try { using (SqlConnection myConn = new SqlConnection(GetConnecionString(dbType))) { SqlCommand cmd = new SqlCommand(); cmd.CommandTimeout = 100; cmd.CommandText = sql; cmd.CommandType = type; cmd.Connection = myConn; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds); return ds; } } catch { throw; } } public static DataSet GetDataSet(DatabaseType dbType, string sql, CommandType type, string param, out int output, params SqlParameter[] parameters) { try { using (SqlConnection myConn = new SqlConnection(GetConnecionString(dbType))) { SqlCommand cmd = new SqlCommand(); cmd.CommandTimeout = 100; cmd.CommandText = sql; cmd.CommandType = type; cmd.Connection = myConn; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds); output = Convert.ToInt32(cmd.Parameters[param].Value); return ds; } } catch { throw; } } #endregion #region 获取第一行第一列 public static T ExecuteScalar(DatabaseType dbType, string sql, CommandType type, params SqlParameter[] parameters) { try { using (SqlConnection myConn = new SqlConnection(GetConnecionString(dbType))) { SqlCommand cmd = new SqlCommand(); cmd.CommandText = sql; cmd.CommandType = type; cmd.Connection = myConn; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } myConn.Open(); return (T)cmd.ExecuteScalar(); } } catch { throw; } } #endregion #region 执行SP获取SQL public static void ExcuteSPOrSql(DatabaseType dbType, string sql, CommandType type, params SqlParameter[] parameters) { try { using (SqlConnection myConn = new SqlConnection(GetConnecionString(dbType))) { SqlCommand cmd = new SqlCommand(); cmd.CommandText = sql; cmd.CommandType = type; cmd.Connection = myConn; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } myConn.Open(); cmd.ExecuteNonQuery(); } } catch { throw; } } /// /// 可以设定执行的超时时间ExcuteSPOrSqlWithTimeOut /// /// /// /// /// 以秒为单位 /// public static void ExcuteSPOrSqlWithTimeOut(DatabaseType dbType, string sql, CommandType type, int timeOut, params SqlParameter[] parameters) { try { using (SqlConnection myConn = new SqlConnection(GetConnecionString(dbType))) { SqlCommand cmd = new SqlCommand(); cmd.CommandText = sql; cmd.CommandType = type; cmd.Connection = myConn; cmd.CommandTimeout = timeOut; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } myConn.Open(); cmd.ExecuteNonQuery(); } } catch { throw; } } public static void ExcuteSPOrSql(DatabaseType dbType, string sql, CommandType type, string param, out int output, params SqlParameter[] parameters) { try { using (SqlConnection myConn = new SqlConnection(GetConnecionString(dbType))) { SqlCommand cmd = new SqlCommand(); cmd.CommandText = sql; cmd.CommandType = type; cmd.Connection = myConn; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } myConn.Open(); cmd.ExecuteNonQuery(); output = Convert.ToInt32(cmd.Parameters[param].Value); } } catch { throw; } } #endregion /// /// 执行查询语句,返回DataSet /// /// 查询语句 /// DataSet public static DataSet Query(DatabaseType dbType, string SQLString) { using (SqlConnection connection = new SqlConnection(GetConnecionString(dbType))) { DataSet ds = new DataSet(); try { connection.Open(); SqlDataAdapter command = new SqlDataAdapter(SQLString, connection); command.Fill(ds, "ds"); } catch (System.Data.SqlClient.SqlException ex) { throw new Exception(ex.Message); } return ds; } } public static int ExecuteSql(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms) { using (SqlCommand cmd = new SqlCommand()) { try { PrepareCommand(cmd, connection, trans, SQLString, cmdParms); int rows = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return rows; } catch (System.Data.SqlClient.SqlException E) { trans.Rollback(); throw new Exception(E.Message); } } } private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, 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 = CommandType.Text; if (cmdParms != null) { foreach (SqlParameter parm in cmdParms) cmd.Parameters.Add(parm); } } public static object GetSingle(SqlConnection connection, SqlTransaction trans, string SQLString) { using (SqlCommand cmd = new SqlCommand(SQLString, connection)) { try { cmd.Connection = connection; cmd.Transaction = trans; object obj = cmd.ExecuteScalar(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } catch (System.Data.SqlClient.SqlException e) { trans.Rollback(); throw new Exception(e.Message); } } } public static object GetSingle(DatabaseType dbType, string SQLString) { using (SqlConnection connection = new SqlConnection(GetConnecionString(dbType))) { using (SqlCommand cmd = new SqlCommand(SQLString, connection)) { try { connection.Open(); object obj = cmd.ExecuteScalar(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } catch (System.Data.OleDb.OleDbException e) { connection.Close(); throw new Exception(e.Message); } } } } public static void BulkInsert(DatabaseType dbType, string tableName, DataTable dataTable, int batchSize = 10000) { if (dataTable.Rows.Count == 0) { return; } using (SqlBulkCopy sqlbulkCopy = new SqlBulkCopy(GetConnecionString(dbType), SqlBulkCopyOptions.UseInternalTransaction)) { sqlbulkCopy.DestinationTableName = tableName; for (int i = 0; i < dataTable.Columns.Count; i++) { sqlbulkCopy.ColumnMappings.Add(dataTable.Columns[i].ColumnName, dataTable.Columns[i].ColumnName); } sqlbulkCopy.WriteToServer(dataTable); } } } }