378 lines
13 KiB
C#
378 lines
13 KiB
C#
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
|
||
};
|
||
|
||
/// <summary>
|
||
/// 获取连接字符串
|
||
/// </summary>
|
||
/// <param name="dbType"></param>
|
||
/// <returns></returns>
|
||
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<T>(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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 可以设定执行的超时时间ExcuteSPOrSqlWithTimeOut
|
||
/// </summary>
|
||
/// <param name="dbType"></param>
|
||
/// <param name="sql"></param>
|
||
/// <param name="type"></param>
|
||
/// <param name="timeOut">以秒为单位</param>
|
||
/// <param name="parameters"></param>
|
||
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
|
||
|
||
/// <summary>
|
||
/// 执行查询语句,返回DataSet
|
||
/// </summary>
|
||
/// <param name="SQLString">查询语句</param>
|
||
/// <returns>DataSet</returns>
|
||
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);
|
||
}
|
||
}
|
||
}
|
||
}
|