You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

272 lines
8.5 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace CommonFunc
{
public class SqlServerDBHelper
{
//日志
public static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private string dbConnStr;
private SqlConnection dbConn = new SqlConnection();
SqlCommandBuilder sbBuilder = new SqlCommandBuilder();
//数据库连接
public string getDBConnStr()
{
return dbConnStr;
}
public SqlServerDBHelper(string initDBConnStr)
{
if (initDBConnStr == null || initDBConnStr.Length == 0)
{
log.WarnFormat("传入的数据库连接串为空!");
}
dbConnStr = initDBConnStr;
}
/// <summary>
/// 数据库连接
/// </summary>
/// <returns></returns>
public bool connect()
{
bool bSucc = false;
dbConn.Close();
dbConn.ConnectionString = dbConnStr;
try
{
dbConn.Open();
bSucc = true;
log.InfoFormat("数据库连接已打开!");
}
catch (Exception ex)
{
log.WarnFormat("连接数据库时发生异常:" + ex.Message);
}
return bSucc;
}
public void close()
{
if (dbConn.State != ConnectionState.Closed)
{
dbConn.Close();
log.InfoFormat("数据库连接已关闭!");
}
}
public ConnectionState connectionState
{
get { return dbConn.State; }
}
public void CheckConnection()
{
if (dbConn.State == ConnectionState.Closed || dbConn.State == ConnectionState.Broken)
{
connect();
}
else if (dbConn.State == ConnectionState.Connecting || dbConn.State == ConnectionState.Executing || dbConn.State == ConnectionState.Fetching)
{
//
}
}
/// <summary>
/// 执行SQL命令 返回DataSet
/// </summary>
/// <param name="sql">sql命令</param>
/// <param name="type">执行类型</param>
/// <param name="sqlparams">参数</param>
/// <returns></returns>
public DataSet getDataSet(string sql, params SqlParameter[] sqlparams)
{
CheckConnection();
DataSet ds = new DataSet();
using (SqlDataAdapter da = new SqlDataAdapter(sql, dbConn))
{
try
{
if (sqlparams != null)
{
da.SelectCommand.Parameters.AddRange(sqlparams);
}
da.Fill(ds);
//防止俩个函数使用同一个sqlparams导致的“另一个SqlParameterCollection中已包含SqlParameter”错误
da.SelectCommand.Parameters.Clear();
}
catch (Exception ex)
{
log.WarnFormat("执行查询操作异常:" + ex.Message);
}
}
return ds;
}
/// <summary>
/// 执行sqlinsert、delete、update语句进行非查询操作
/// </summary>
/// <param name="sql">sql命令</param>
/// <returns>返回受影响行数</returns>
public int executeUpdate(string sql)
{
CheckConnection();
int rowCount = 0;
using (SqlCommand cmd = new SqlCommand(sql, dbConn))
{
try
{
rowCount = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
log.WarnFormat("执行更新操作异常:{0}", ex.Message);
}
}
return rowCount;
}
public int executeUpdate(string sql, params SqlParameter[] sqlparams)
{
CheckConnection();
int rowCount = 0;
using (SqlCommand cmd = new SqlCommand(sql, dbConn))
{
try
{
if (sqlparams != null)
{
cmd.Parameters.AddRange(sqlparams);
}
rowCount = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
log.WarnFormat("执行更新操作异常:{0}", ex.Message);
}
}
return rowCount;
}
/// <summary>
/// 使用SqlDataAdapter.Update()更新数据
/// </summary>
/// <param name="str"></param>
public void updateDataTable(DataTable dt, string selectSql, MissingSchemaAction msaOption = MissingSchemaAction.AddWithKey)
{
CheckConnection();
using (SqlDataAdapter da = new SqlDataAdapter())
{
da.MissingSchemaAction = msaOption;
using (SqlCommand cmd = new SqlCommand(selectSql, dbConn))
{
da.SelectCommand = cmd;
sbBuilder.DataAdapter = da;
da.InsertCommand = da.InsertCommand;
da.UpdateCommand = da.UpdateCommand;
da.DeleteCommand = da.DeleteCommand;
try
{
da.Update(dt);
dt.AcceptChanges();
}
catch (Exception ex)
{
log.WarnFormat("数据更新时发生异常{0},SQL:{1}", ex.Message, selectSql);
}
}
}
}
/// <summary>
/// 执行多条SQL语句实现数据库事务。
/// </summary>sql2000数据库
/// <param name="sqlList">多条SQL语句</param>
public bool executeBatchSql(List<string> sqlList)
{
CheckConnection();
bool isCommit = false;
string currSql = string.Empty;
SqlTransaction tx = dbConn.BeginTransaction();
SqlCommand cmd = new SqlCommand();
try
{
cmd.Connection = dbConn;
cmd.Transaction = tx;
for (int iLoop = 0; iLoop < sqlList.Count; iLoop++)
{
isCommit = false;
currSql = sqlList[iLoop].Trim();
if (currSql.Length > 0)
{
cmd.CommandText = currSql;
cmd.ExecuteNonQuery();
}
}
tx.Commit();
isCommit = true;
}
catch (System.Data.SqlClient.SqlException E)
{
tx.Rollback();
log.WarnFormat("执行事务过程中出现异常:{0},{1}", E.Message, currSql);
}
finally
{
cmd.Dispose();
}
return isCommit;
}
public object getScalar(string sql, params SqlParameter[] sqlparams)
{
CheckConnection();
Object scaleValue = null;
if (dbConn.State != ConnectionState.Open)
{
return null;
}
DataSet ds = new DataSet();
using (SqlDataAdapter da = new SqlDataAdapter(sql, dbConn))
{
try
{
if (sqlparams != null)
{
da.SelectCommand.Parameters.AddRange(sqlparams);
}
da.Fill(ds);
}
catch (Exception ex)
{
log.WarnFormat("执行查询操作异常{0},SQL{1},{2}", ex.Message, sql, sqlparams);
}
}
try
{
if (ds.Tables[0].Rows.Count > 0)
{
scaleValue = ds.Tables[0].Rows[0][0];
}
}
catch (Exception ex)
{
log.WarnFormat("获取标量值发生异常{0}", ex.Message);
}
return scaleValue;
}
}
}