TG.WXCRM.V4/DAL/SqlHelper.cs

390 lines
14 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
};
/// <summary>
/// 获取连接字符串
/// </summary>
/// <param name="dbType"></param>
/// <returns></returns>
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<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);
}
}
}
}