using Microsoft.Data.SqlClient;
using System.Data;
using System.Data.Common;
using RB_MES_API.Context;
namespace RB_MES_API.Controllers
{
///
/// SQL帮助类
///
public class KDSqlHelper : IKDSqlHelper
{
private readonly RBContext _context;
///
/// 依赖性注入
///
///
///
public KDSqlHelper(RBContext context)
{
_context = context;
}
private string Myconnstr(bool KD)
{
return KD ? ConnectionString.GetConfig("ConnectionStrings", "ERP_Conn") : ConnectionString.GetConfig("ConnectionStrings", "RBConn");
}
///
public async Task ExecuteNonQueryAsync(string cmdText, CommandType cmdType, SqlParameter[]? sqlParams, bool KD = false)
{
string mess = null;
if (cmdText.Trim() == null) return "-1";
string connstr = Myconnstr(KD);
using SqlConnection connection = new SqlConnection(connstr);
try
{
connection.Open();
using var cmd = connection.CreateCommand();
//cmd.CommandTimeout = 0;
PrepareCommand(cmd, cmdType, cmdText, sqlParams);
cmd.Transaction = connection.BeginTransaction();
try
{
await cmd.ExecuteNonQueryAsync();
cmd.Transaction.Commit();
mess = "OK";
}
catch (Exception ex)
{
cmd.Transaction.Rollback();
//将错误写到错误日志
mess = ex.Message;
LogHelper.WriteLog(string.Format("直接执行编译好的SQL语句的ExecuteNonQueryAsync方法发生错误在:{0}", mess + "\n" + cmdText));
//throw;
}
finally
{
cmd.Dispose();
}
}
catch (Exception ex)
{
//将错误写到错误日志,连不上数据库,只能写在磁盘文件中...
mess = ex.Message;
LogHelper.WriteLog(string.Format("直接执行编译好的SQL语句的ExecuteNonQueryAsync方法发生错误:{0}", mess));
}
finally
{
connection.Dispose();
}
return mess;
//throw new NotImplementedException();
}
///
public object? ExecuteScalar(CommandType cmdType, string cmdText, SqlParameter[]? sqlParams, ref string? mess, bool KD = false)
{
mess = null;
object? result = null;
if (string.IsNullOrEmpty(cmdText.Trim())) return null;
string connstr = Myconnstr(KD);
using SqlConnection connection = new SqlConnection(connstr);
try
{
connection.Open();
using var cmd = connection.CreateCommand();
//cmd.CommandTimeout = 0;
PrepareCommand(cmd, cmdType, cmdText, sqlParams);
//cmd.Transaction = connection.BeginTransaction();
try
{
result = cmd.ExecuteScalar();
//cmd.Transaction.Commit();
}
catch (Exception ex)
{
cmd.Transaction.Rollback();
//将错误写到错误日志
mess = ex.Message;
LogHelper.WriteLog(string.Format("并返回由查询返回的结果集中第一行的第一列的ExecuteScalar方法发生错误在:{0}", ex.Message + "\n" + cmdText));
}
finally
{
cmd.Dispose();
}
}
catch (Exception ex)
{
//将错误写到错误日志,连不上数据库,只能写在磁盘文件中...
mess = ex.Message;
LogHelper.WriteLog(string.Format("并返回由查询返回的结果集中第一行的第一列的ExecuteScalar方法发生错误:{0}", ex.Message));
}
finally
{
connection.Dispose();
}
//result = result is DBNull ? null : result;
return result;
//throw new NotImplementedException();
}
///
public DataSet? GetDataSet(CommandType cmdType, string? cmdText, SqlParameter[]? sqlParams, ref string? mess, bool KD = false)
{
mess = null;
if (cmdText == null || cmdText == "")
{
mess = "不执行空的查询脚本";
return null;
}
var data = new DataSet();
string connstr = Myconnstr(KD);
using SqlConnection connection = new SqlConnection(connstr);
try
{
connection.Open();
using var cmd = connection.CreateCommand();
//cmd.CommandTimeout = 0;
PrepareCommand(cmd, cmdType, cmdText, sqlParams);
cmd.Transaction = connection.BeginTransaction();
SqlDataAdapter adapter = new(cmd);
try
{
adapter.Fill(data);
cmd.Transaction.Commit();
}
catch (Exception ex)
{
cmd.Transaction.Rollback();
//将错误写到错误日志
mess = ex.Message;
LogHelper.WriteLog(string.Format("获取多个结果集的GetDataSet方法发生错误在:{0}", ex.Message + "\n" + cmdText));
}
finally
{
adapter.Dispose();
cmd.Dispose();
}
}
catch (Exception ex)
{
//将错误写到错误日志,连不上数据库,只能写在磁盘文件中...
mess = ex.Message;
LogHelper.WriteLog(string.Format("获取多个结果集的GetDataSet方法发生错误:{0}", ex.Message));
}
finally
{
connection.Dispose();
}
return data;
//throw new NotImplementedException();
}
///
public Dictionary