using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
namespace WX.CRM.CRMServices.SqlHelper
{
public class SqlHelper
{
#region 连接字符串
private static string GetConnection(string connectionKey)
{
return ConfigurationManager.ConnectionStrings[connectionKey].ConnectionString;
}
public enum DatabaseType
{
AYCRM,
BC,
AYResourceSystem,
AYCompassSSO,
Future,
SmsSystem,
FuturesCusTran,
SilverAYCRM,
SilverFutures,
CRMRES,
IPSC
};
///
/// 获取连接字符串
///
///
///
public static string GetConnecionString(DatabaseType dbType)
{
string strConn = null;
switch (dbType)
{
case DatabaseType.AYCRM:
strConn = GetConnection("AYCRMConn");
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.CRMRES:
strConn = GetConnection("CRMRESConn");
break;
case DatabaseType.IPSC:
strConn = GetConnection("IPSCConn");
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);
}
}
}
}