From 37aea5dcd10bdb150495755e3d07eba6d6aef486 Mon Sep 17 00:00:00 2001 From: tdx Date: Mon, 1 Dec 2025 03:45:00 +0000 Subject: [PATCH] SVN r1061 SVN-Revision: r1061 --- 插件库/Lskj.Core/DBConfig.cs | 55 ++- 插件库/Lskj.Core/SqlHelper.cs | 693 +++++++++++++++++++++------------- 2 files changed, 457 insertions(+), 291 deletions(-) diff --git a/插件库/Lskj.Core/DBConfig.cs b/插件库/Lskj.Core/DBConfig.cs index 2d8482e..0b8ca64 100644 --- a/插件库/Lskj.Core/DBConfig.cs +++ b/插件库/Lskj.Core/DBConfig.cs @@ -20,6 +20,7 @@ using System.Net.Sockets; using System.Threading; using System.Diagnostics; using System.IO; +using System.Data.Common; namespace Lskj.Core { @@ -178,7 +179,7 @@ namespace Lskj.Core DataBase = subKey.GetValue("datastr", "") + ""; ServerName = subKey.GetValue("ServerName", "") + ""; InternalNetworkAddress = subKey.GetValue("InternalNetworkAddress", "") + ""; - ExternalNetworkAddress= subKey.GetValue("ExternalNetworkAddress", "") + ""; + ExternalNetworkAddress = subKey.GetValue("ExternalNetworkAddress", "") + ""; IsInternalNetwork = (subKey.GetValue("IsInternalNetwork", "") + "").Equals("1"); LoginName = subKey.GetValue("LoginName", "") + ""; @@ -383,37 +384,27 @@ namespace Lskj.Core /// 版本:1.0 /// /// true if XXXX, false otherwise. - public bool CreateConnection(string Connection = "") + public bool CreateConnection(string Connection = "", ConnectionType connectionType = ConnectionType.SqlServer) { - - string connStr = GetConnection(Connection); - if (SqlHelper._connection != null) - { - try - { - SqlHelper._connection.Close(); - SqlHelper._connection.Dispose(); - } - catch (Exception) - { - } - SqlHelper._connection = null; - } + bool isConnect = false; try { - SqlHelper._connection = new SqlConnection(connStr); - SqlHelper._connection.Open(); - - return true; - } - catch (Exception ex) - { - LogHelper.Instance.WriteLog(ex.Message); - } - return false; - } - - - - } -} + string connStr = GetConnection(Connection); + //connectionType = ConnectionType.KdbnServer; + //connStr = "host=192.168.0.55;port=54321;database=test3;username=lserpAdmin;password=lserp110;"; + //connectionType = ConnectionType.DmServer; + //connStr = "Server=192.168.0.55:5236; schema=DBO; UserId=LSERPADMIN; PWD=Lserp110"; + string providerName = "System.Data.SqlClient"; + SqlHelper.ConnectionType = ConnectionType.SqlServer; + if (connectionType == ConnectionType.KdbnServer) + { + providerName = "Kdbndp"; + SqlHelper.ConnectionType = ConnectionType.KdbnServer; + } + else if (connectionType == ConnectionType.DmServer) + { + providerName = "Dm"; + SqlHelper.ConnectionType = ConnectionType.DmServer; + } + SqlHelper.dbFactory = DbProviderFactories.GetFactory(providerName); + \ No newline at end of file diff --git a/插件库/Lskj.Core/SqlHelper.cs b/插件库/Lskj.Core/SqlHelper.cs index 6baa3fd..ea11cdf 100644 --- a/插件库/Lskj.Core/SqlHelper.cs +++ b/插件库/Lskj.Core/SqlHelper.cs @@ -1,58 +1,77 @@ -/****************************** -* 说明:数据库操作类 -* 创建人:龚宇超 -* 创建日期:2017-07-24 -* 修改人: -* 修改日期: -* 修改备注: -* 版本:1.0.0.0 -******************************/ +using Kdbndp; +using KdbndpTypes; using System; -using System.Collections.Generic; +using System.Data; +using System.Data.Common; +using System.Data.SqlClient; using System.Linq; using System.Text; -using System.Data.SqlClient; -using System.Data; - namespace Lskj.Core { /// - /// 数据库操作类 + /// 数据库连接类型 /// + public enum ConnectionType + { + SqlServer = 0, + KdbnServer = 1, + DmServer = 2 + } public static class SqlHelper { + /// + /// 连接类型 + /// + private static ConnectionType connectionType = ConnectionType.SqlServer; + public static ConnectionType ConnectionType + { + get { return connectionType; } + set { connectionType = value; } + } + /// + /// 数据连接工厂 + /// + public static DbProviderFactory dbFactory; /// /// 数据连接 /// - public static SqlConnection _connection; + public static DbConnection _connection; /// /// 请求超时时间 /// public static int CommandTimeout; + /// + /// 说明:是否已经连接数据库 + /// 创建者:朗速科技有限公司 + /// 创建日期:2024-3-5 + /// 功能关联:公版方法 + /// + /// + public static bool IsConnect() + { + bool isConnect = _connection.State == ConnectionState.Open; + return isConnect; + } #region ExecuteAdapter - /// /// 说明:获取适配器 - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// Type of the command. /// The command text. /// The command parameters. /// SqlDataAdapter. - public static SqlDataAdapter ExecuteAdapter(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) + public static DbDataAdapter ExecuteAdapter(CommandType cmdType, string cmdText, params DbParameter[] commandParameters) { - SqlDataAdapter adapter; - SqlCommand cmd = new SqlCommand(); + DbDataAdapter adapter = dbFactory.CreateDataAdapter(); + DbCommand cmd = dbFactory.CreateCommand(); try { PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters); - adapter = new SqlDataAdapter(cmd); + adapter.SelectCommand = cmd; } catch { @@ -60,28 +79,23 @@ namespace Lskj.Core } return adapter; } - - /// /// 说明:获取适配器 - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// Type of the command. /// The command text. /// SqlDataAdapter. - public static SqlDataAdapter ExecuteAdapter(CommandType cmdType, string cmdText) + public static DbDataAdapter ExecuteAdapter(CommandType cmdType, string cmdText) { - SqlDataAdapter adapter; - SqlCommand cmd = new SqlCommand(); + DbDataAdapter adapter = dbFactory.CreateDataAdapter(); + DbCommand cmd = dbFactory.CreateCommand(); try { PrepareCommand(cmd, _connection, null, cmdType, cmdText, null); - adapter = new SqlDataAdapter(cmd); + adapter.SelectCommand = cmd; } catch { @@ -90,16 +104,12 @@ namespace Lskj.Core return adapter; } #endregion - #region ExecuteDataTable /// /// 说明:执行sql返回DataTable - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// The command text. /// DataTable. @@ -109,28 +119,21 @@ namespace Lskj.Core } /// /// 说明:执行sql返回DataTable - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// The command text. /// DataTable. - public static DataTable ExecuteDataTable(string cmdText, params SqlParameter[] commandParameters) + public static DataTable ExecuteDataTable(string cmdText, params DbParameter[] commandParameters) { return ExecuteDataSet(CommandType.Text, cmdText, "temp", commandParameters).Tables[0]; } - /// /// 说明:执行sql返回指定字段值 - /// 创建人:龚宇超 - /// 创建日期:2017-08-15 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// Name of the field. /// The command text. @@ -150,18 +153,15 @@ namespace Lskj.Core } /// /// 说明:执行sql返回指定字段值 - /// 创建人:龚宇超 - /// 创建日期:2017-11-27 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// Name of the field. /// The command text. /// The command parameters. /// System.Object. - public static object ExecuteObject(string fieldName, string cmdText, params SqlParameter[] commandParameters) + public static object ExecuteObject(string fieldName, string cmdText, params DbParameter[] commandParameters) { object result = null; try @@ -176,12 +176,9 @@ namespace Lskj.Core } /// /// 说明:执行sql返回指定字段值 - /// 创建人:龚宇超 - /// 创建日期:2017-08-15 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// Name of the field. /// The command text. @@ -193,26 +190,21 @@ namespace Lskj.Core } /// /// 说明:执行sql返回指定字段值 - /// 创建人:龚宇超 - /// 创建日期:2017-11-27 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// Name of the field. /// The command text. /// The command parameters. /// System.String. - public static string ExecuteString(string fieldName, string cmdText, params SqlParameter[] commandParameters) + public static string ExecuteString(string fieldName, string cmdText, params DbParameter[] commandParameters) { object obj = ExecuteObject(fieldName, cmdText, commandParameters); return obj == null ? "" : obj.ToString(); } #endregion - #region ExecuteDataSet - /// /// 说明:查询结果集 /// 创建人:龚宇超 @@ -227,7 +219,7 @@ namespace Lskj.Core /// Name of the tab. /// The command parameters. /// DataSet. - public static DataSet ExecuteDataSet(int cmdType, string cmdText, string tabName, params SqlParameter[] commandParameters) + public static DataSet ExecuteDataSet(int cmdType, string cmdText, string tabName, params DbParameter[] commandParameters) { CommandType _cmdType = CommandType.Text; switch (cmdType) @@ -255,14 +247,15 @@ namespace Lskj.Core /// 表名 /// 参数 /// DataSet. - public static DataSet ExecuteDataSet(CommandType cmdType, string cmdText, string tabName, params SqlParameter[] commandParameters) + public static DataSet ExecuteDataSet(CommandType cmdType, string cmdText, string tabName, params DbParameter[] commandParameters) { DataSet set2; - SqlCommand cmd = new SqlCommand(); + DbCommand cmd = dbFactory.CreateCommand(); try { PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters);//sql参数处理 - SqlDataAdapter adapter = new SqlDataAdapter(cmd);//创建对象,与sql命令对象绑定 + DbDataAdapter adapter = dbFactory.CreateDataAdapter(); + adapter.SelectCommand = cmd;//创建对象,与sql命令对象绑定 DataSet dataSet = new DataSet(); adapter.Fill(dataSet, tabName);//填充数据。第二个参数是数据集中内存表的名字,可以与数据库中的不同 //adapter.FillSchema(dataSet, SchemaType.Mapped, tabName); @@ -286,17 +279,13 @@ namespace Lskj.Core { cmd.Dispose(); } - return set2; } /// /// 说明:查询结果集 - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// 语句类型存储过程或者sql语句 /// 执行内容 @@ -308,12 +297,9 @@ namespace Lskj.Core } /// /// 说明:查询结果集 - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// 执行内容 /// DataSet. @@ -323,34 +309,35 @@ namespace Lskj.Core } /// /// 说明:查询结果集 - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// Name of the procedure. /// 表名 /// The parameter names. /// The parameter values. /// DataSet. - public static DataSet ExecuteDataSet(string procedureName, string tabName, string[] parameterNames, object[] parameterValues) + public static DataSet ExecuteDataSet(string procedureName, string tabName, string[] parameterNames, DbParameter[] parameterValues) { DataSet set2; try { - SqlCommand cmd = new SqlCommand(procedureName, _connection); + DbCommand cmd = dbFactory.CreateCommand(); + cmd.CommandText = procedureName; cmd.CommandType = CommandType.StoredProcedure; - if (parameterNames != null && parameterValues != null) { for (int i = 0; i < parameterNames.Length && i < parameterValues.Length; i++) { - cmd.Parameters.AddWithValue(parameterNames[i], parameterValues[i]); + DbParameter dbParameter = dbFactory.CreateParameter(); + dbParameter.ParameterName = parameterNames[i]; + dbParameter.Value = parameterValues[i]; + cmd.Parameters.Add(dbParameter); } } - SqlDataAdapter adapter = new SqlDataAdapter(cmd); + DbDataAdapter adapter = dbFactory.CreateDataAdapter(); + adapter.SelectCommand = cmd; DataSet dataSet = new DataSet(); adapter.Fill(dataSet, tabName); set2 = dataSet; @@ -362,30 +349,63 @@ namespace Lskj.Core return set2; } #endregion - #region ExecuteNonQuery /// /// 说明:执行sql语句或者存储过程 - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// Type of the command. /// The command text. /// The command parameters. /// System.Int32. - public static int ExecuteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) + public static int ExecuteNonQuery(CommandType cmdType, string cmdText, params DbParameter[] commandParameters) { - SqlCommand cmd = new SqlCommand(); + DbCommand cmd = dbFactory.CreateCommand(); int num = 0; try { - - PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters); - num = cmd.ExecuteNonQuery(); + if (_connection is KdbndpConnection) + { + if (cmdType == CommandType.StoredProcedure) + { + PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters); + DbDataAdapter adapter = dbFactory.CreateDataAdapter(); + adapter.SelectCommand = cmd; + DataSet dataSet = new DataSet(); + adapter.Fill(dataSet); + if (dataSet.Tables.Count > 0) + { + DataTable resultTable = dataSet.Tables[dataSet.Tables.Count - 1]; + int.TryParse(resultTable.Rows[0]["execcount"] + "", out num); + string returnValue = resultTable.Rows[0]["returnValue"] + ""; + string outputValue = resultTable.Rows[0]["outputValue"] + ""; + for (int i = 0; i < commandParameters.Length; i++) + { + DbParameter sqlParameter = commandParameters[i]; + if (sqlParameter.Direction == ParameterDirection.ReturnValue) + { + sqlParameter.Value = returnValue; + } + if (sqlParameter.Direction == ParameterDirection.Output) + { + sqlParameter.Value = outputValue; + } + } + } + } + else + { + PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters); + num = cmd.ExecuteNonQuery(); + } + } + else if (_connection is SqlConnection) + { + PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters); + num = cmd.ExecuteNonQuery(); + } cmd.Parameters.Clear(); } catch (Exception e) @@ -408,29 +428,63 @@ namespace Lskj.Core } return num; } - /// /// 说明:执行sql语句或者存储过程,带事务 - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// - /// Type of the command. - /// The command text. - /// The command parameters. - /// System.Int32. - public static int ExecuteNonQuery(CommandType cmdType, string cmdText, SqlTransaction Trans,int a ,params SqlParameter[] commandParameters) + /// + /// + /// + /// + /// + public static int ExecuteNonQuery(CommandType cmdType, string cmdText, DbTransaction Trans, int a, params DbParameter[] commandParameters) { - SqlCommand cmd = new SqlCommand(); + DbCommand cmd = dbFactory.CreateCommand(); int num = 0; try { - - PrepareCommand(cmd, _connection, Trans, cmdType, cmdText, commandParameters); - num = cmd.ExecuteNonQuery(); + if (_connection is KdbndpConnection) + { + if (cmdType == CommandType.StoredProcedure) + { + PrepareCommand(cmd, _connection, Trans, cmdType, cmdText, commandParameters); + DbDataAdapter adapter = dbFactory.CreateDataAdapter(); + adapter.SelectCommand = cmd; + DataSet dataSet = new DataSet(); + adapter.Fill(dataSet); + if (dataSet.Tables.Count > 0) + { + DataTable resultTable = dataSet.Tables[dataSet.Tables.Count - 1]; + int.TryParse(resultTable.Rows[0]["execcount"] + "", out num); + string returnValue = resultTable.Rows[0]["returnValue"] + ""; + string outputValue = resultTable.Rows[0]["outputValue"] + ""; + for (int i = 0; i < commandParameters.Length; i++) + { + DbParameter sqlParameter = commandParameters[i]; + if (sqlParameter.Direction == ParameterDirection.ReturnValue) + { + sqlParameter.Value = returnValue; + } + if (sqlParameter.Direction == ParameterDirection.Output) + { + sqlParameter.Value = outputValue; + } + } + } + } + else + { + PrepareCommand(cmd, _connection, Trans, cmdType, cmdText, commandParameters); + num = cmd.ExecuteNonQuery(); + } + } + else if (_connection is SqlConnection) + { + PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters); + num = cmd.ExecuteNonQuery(); + } cmd.Parameters.Clear(); } catch (Exception e) @@ -453,15 +507,11 @@ namespace Lskj.Core } return num; } - /// /// 说明:执行sql语句或者存储过程 - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// Type of the command. /// The command text. @@ -472,12 +522,9 @@ namespace Lskj.Core } /// /// 说明:执行sql语句或者存储过程 - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// The command text. /// System.Int32. @@ -486,29 +533,25 @@ namespace Lskj.Core return ExecuteNonQuery(CommandType.Text, cmdText); } #endregion - #region ExecuteReader /// /// 说明:执行sql语句或者存储过程并返回结果集(只读、只进) - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// Type of the command. /// The command text. /// The command parameters. /// SqlDataReader. - public static SqlDataReader ExecuteReader(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) + public static DbDataReader ExecuteReader(CommandType cmdType, string cmdText, params DbParameter[] commandParameters) { - SqlDataReader reader2; - SqlCommand cmd = new SqlCommand(); + DbDataReader reader2; + DbCommand cmd = dbFactory.CreateCommand(); try { PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters); - SqlDataReader reader = cmd.ExecuteReader(); + DbDataReader reader = cmd.ExecuteReader(); cmd.Parameters.Clear(); reader2 = reader; } @@ -519,7 +562,6 @@ namespace Lskj.Core return reader2; } #endregion - #region ExecuteCommand /// /// 说明:执行sql语句或者存储过程并返回SqlCommand(只读、只进) @@ -534,9 +576,9 @@ namespace Lskj.Core /// The command text. /// The command parameters. /// SqlDataReader. - public static SqlCommand ExecuteCommand(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) + public static DbCommand ExecuteCommand(CommandType cmdType, string cmdText, params DbParameter[] commandParameters) { - SqlCommand cmd = new SqlCommand(); + DbCommand cmd = dbFactory.CreateCommand(); try { PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters); @@ -549,25 +591,21 @@ namespace Lskj.Core return cmd; } #endregion - #region ExecuteScalar /// /// 说明:执行sql语句或者存储过程并返回结果集第一行第一列 - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// The connectionection. /// Type of the command. /// The command text. /// The command parameters. /// System.Object. - public static object ExecuteScalar(SqlConnection Connectionection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) + public static object ExecuteScalar(DbConnection Connectionection, CommandType cmdType, string cmdText, params DbParameter[] commandParameters) { - SqlCommand cmd = new SqlCommand(); + DbCommand cmd = dbFactory.CreateCommand(); PrepareCommand(cmd, Connectionection, null, cmdType, cmdText, commandParameters); object obj2 = cmd.ExecuteScalar(); cmd.Parameters.Clear(); @@ -575,30 +613,25 @@ namespace Lskj.Core } /// /// 说明:执行sql语句或者存储过程并返回结果集第一行第一列 - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// Type of the command. /// The command text. /// The command parameters. /// System.Object. - public static object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) + public static object ExecuteScalar(CommandType cmdType, string cmdText, params DbParameter[] commandParameters) { try { - SqlCommand cmd = new SqlCommand(); - { - PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters); - object obj2 = cmd.ExecuteScalar(); - cmd.Parameters.Clear(); - return obj2; - } + DbCommand cmd = dbFactory.CreateCommand(); + PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters); + object obj2 = cmd.ExecuteScalar(); + cmd.Parameters.Clear(); + return obj2; } - catch (Exception e) + catch (Exception e) { if (e.Message.StartsWith("在从服务器接收结果时发生传输级错误") || e.Message.StartsWith("在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误") || @@ -612,85 +645,66 @@ namespace Lskj.Core //throw; } } - } /// /// 说明:执行sql语句或者存储过程并返回结果集第一行第一列 - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// Type of the command. /// The command text. /// System.Object. public static object ExecuteScalar(CommandType cmdType, string cmdText) { - SqlCommand cmd = new SqlCommand(); - { - PrepareCommand(cmd, _connection, null, cmdType, cmdText, null); - object obj2 = cmd.ExecuteScalar(); - cmd.Parameters.Clear(); - return obj2; - } + DbCommand cmd = dbFactory.CreateCommand(); + PrepareCommand(cmd, _connection, null, cmdType, cmdText, null); + object obj2 = cmd.ExecuteScalar(); + cmd.Parameters.Clear(); + return obj2; } /// /// 说明:执行sql语句或者存储过程并返回结果集第一行第一列 - /// 创建人:龚宇超 - /// 创建日期:2017-08-21 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// The command text. /// System.Object. public static object ExecuteScalar(string cmdText) { - SqlCommand cmd = new SqlCommand(); - { - PrepareCommand(cmd, _connection, null, CommandType.Text, cmdText, null); - object obj2 = cmd.ExecuteScalar(); - cmd.Parameters.Clear(); - return obj2; - } + DbCommand cmd = dbFactory.CreateCommand(); + PrepareCommand(cmd, _connection, null, CommandType.Text, cmdText, null); + object obj2 = cmd.ExecuteScalar(); + cmd.Parameters.Clear(); + return obj2; } - /// /// 说明:执行sql语句或者存储过程并返回结果集第一行第一列,带事务 - /// 创建人:龚宇超 - /// 创建日期:2017-08-21 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// - /// The command text. - /// System.Object. - public static object ExecuteScalar(string cmdText,SqlTransaction Trans,int a,int b) + /// + /// + /// + /// + /// + public static object ExecuteScalar(string cmdText, DbTransaction Trans) { - SqlCommand cmd = new SqlCommand(); - { - PrepareCommand(cmd, _connection, Trans, CommandType.Text, cmdText, null); - object obj2 = cmd.ExecuteScalar(); - cmd.Parameters.Clear(); - return obj2; - } + DbCommand cmd = dbFactory.CreateCommand(); + PrepareCommand(cmd, _connection, Trans, CommandType.Text, cmdText, null); + object obj2 = cmd.ExecuteScalar(); + cmd.Parameters.Clear(); + return obj2; } - #endregion - #region PrepareCommand /// - /// 说明: sql参数处理 - /// 创建人:龚宇超 - /// 创建日期:2017-07-24 - /// 修改人: - /// 修改日期: - /// 修改备注: - /// 版本:1.0 + /// 说明:sql参数处理 + /// 创建者:朗速科技有限公司 + /// 创建日期:2023-12-28 + /// 功能关联:公版方法 /// /// The command. /// The connection. @@ -698,28 +712,189 @@ namespace Lskj.Core /// Type of the command. /// The command text. /// The command parms. - private static void PrepareCommand(SqlCommand cmd, SqlConnection Connection, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) + private static void PrepareCommand(DbCommand cmd, DbConnection Connection, DbTransaction trans, CommandType cmdType, string cmdText, DbParameter[] cmdParms) { - if (Connection.State != ConnectionState.Open) + try { - Connection.Open(); - } - cmd.Connection = Connection; - cmd.CommandTimeout = CommandTimeout; - cmd.CommandText = cmdText; - if (trans != null) - { - cmd.Transaction = trans; - } - cmd.CommandType = cmdType; - if (cmdParms != null) - { - foreach (SqlParameter parameter in cmdParms) + if (connectionType == ConnectionType.KdbnServer) { - cmd.Parameters.Add(parameter); + if (Connection.State == ConnectionState.Open) + { + Connection.Close(); + } + Connection.Open(); + cmd.Connection = Connection; + cmd.CommandTimeout = CommandTimeout; + cmd.CommandText = cmdText; + if (trans != null) + { + cmd.Transaction = trans; + } + DbParameter[] kdbndpParameters = CastKdbndpParameterArray(cmdParms); + if (cmdType == CommandType.StoredProcedure) + { + string execSqlParas = ""; + if (cmdParms != null) + { + foreach (KdbndpParameter parameter in kdbndpParameters) + { + if (parameter.Direction == ParameterDirection.ReturnValue) + { + continue; + } + string value = (parameter.Value + "").Replace("'", "''"); + if (parameter.Direction == ParameterDirection.Output) + { + execSqlParas += $"@outputValue output,"; + } + else + { + execSqlParas += $"'{value}',"; + } + } + } + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("declare @returnValue varchar(max)"); + stringBuilder.AppendLine("declare @outputValue varchar(max)"); + stringBuilder.AppendLine($"exec @returnValue = {cmdText} {execSqlParas.TrimEnd(',')}"); + stringBuilder.AppendLine("select @@ROWCOUNT execcount,@returnValue returnValue,@outputValue outputValue"); + cmd.CommandType = CommandType.Text; + cmd.CommandText = stringBuilder.ToString(); + } + else + { + cmd.CommandText = cmdText; + if (cmdParms != null) + { + foreach (KdbndpParameter parameter in kdbndpParameters) + { + cmd.Parameters.Add(parameter); + } + } + } } + else if (connectionType == ConnectionType.SqlServer || connectionType == ConnectionType.DmServer) + { + if (Connection.State != ConnectionState.Open) + { + Connection.Open(); + } + cmd.Connection = Connection; + cmd.CommandTimeout = CommandTimeout; + cmd.CommandText = cmdText; + if (trans != null) + { + cmd.Transaction = trans; + } + cmd.CommandType = cmdType; + if (cmdParms != null) + { + foreach (SqlParameter parameter in cmdParms) + { + cmd.Parameters.Add(parameter); + } + } + } + + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + throw; } } #endregion - } -} + /// + /// 转换为人大金仓参数集合 + /// + /// + /// + public static DbParameter[] CastKdbndpParameterArray(DbParameter[] commandParameters) + { + if (commandParameters == null) + { + return null; + } + DbParameter[] kdbndpParameters = new DbParameter[commandParameters.Length]; + for (int i = 0; i < commandParameters.Length; i++) + { + DbParameter sqlParameter = commandParameters[i]; + kdbndpParameters[i] = CastKdbndpParameter(sqlParameter); + } + return kdbndpParameters; + } + /// + /// 转换为人大金仓参数 + /// + /// + /// + public static DbParameter CastKdbndpParameter(DbParameter parameter) + { + KdbndpParameter kdbndpParameter = new KdbndpParameter(); + KdbndpDbType kdbndpDbType = KdbndpDbType.Text; + if (parameter is SqlParameter sqlParameter) + { + switch (sqlParameter.SqlDbType) + { + case SqlDbType.BigInt: + kdbndpDbType = KdbndpDbType.SqlServer_Bigint; + break; + case SqlDbType.Binary: + kdbndpDbType = KdbndpDbType.SqlServer_Binary; + break; + case SqlDbType.Bit: + kdbndpDbType = KdbndpDbType.Bit; + break; + case SqlDbType.Char: + kdbndpDbType = KdbndpDbType.Char; + break; + case SqlDbType.DateTime: + kdbndpDbType = KdbndpDbType.DateTime; + break; + case SqlDbType.Decimal: + kdbndpDbType = KdbndpDbType.SqlServer_Numeric; + break; + case SqlDbType.Float: + kdbndpDbType = KdbndpDbType.SqlServer_Float; + break; + case SqlDbType.Image: + kdbndpDbType = KdbndpDbType.Image; + break; + case SqlDbType.Int: + kdbndpDbType = KdbndpDbType.SqlServer_Int; + break; + case SqlDbType.Money: + kdbndpDbType = KdbndpDbType.SqlServer_Money; + break; + case SqlDbType.NChar: + kdbndpDbType = KdbndpDbType.NChar; + break; + case SqlDbType.NText: + kdbndpDbType = KdbndpDbType.Ntext; + break; + case SqlDbType.NVarChar: + kdbndpDbType = KdbndpDbType.Text; + break; + case SqlDbType.Real: + kdbndpDbType = KdbndpDbType.SqlServer_Real; + break; + case SqlDbType.SmallDateTime: + kdbndpDbType = KdbndpDbType.SmallDateTime; + break; + case SqlDbType.SmallInt: + kdbndpDbType = KdbndpDbType.SqlServer_Smallint; + break; + case SqlDbType.Text: + kdbndpDbType = KdbndpDbType.Text; + break; + case SqlDbType.Timestamp: + kdbndpDbType = KdbndpDbType.Timestamp; + break; + case SqlDbType.TinyInt: + kdbndpDbType = KdbndpDbType.SqlServer_Tinyint; + break; + case SqlDbType.VarBinary: + kdbndpDbType = KdbndpDbType.SqlServer_VarBinary; + break; + case SqlDbType.VarChar: + kdbndp \ No newline at end of file