diff --git a/插件库/Lskj.Core/SqlHelper.cs b/插件库/Lskj.Core/SqlHelper.cs
index ea11cdf..1c38095 100644
--- a/插件库/Lskj.Core/SqlHelper.cs
+++ b/插件库/Lskj.Core/SqlHelper.cs
@@ -1,4 +1,5 @@
-using Kdbndp;
+using Dm;
+using Kdbndp;
using KdbndpTypes;
using System;
using System.Data;
@@ -6,6 +7,7 @@ using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
+using System.Text.RegularExpressions;
namespace Lskj.Core
{
@@ -366,7 +368,7 @@ namespace Lskj.Core
int num = 0;
try
{
- if (_connection is KdbndpConnection)
+ if (connectionType == ConnectionType.KdbnServer || connectionType == ConnectionType.DmServer)
{
if (cmdType == CommandType.StoredProcedure)
{
@@ -379,8 +381,7 @@ namespace Lskj.Core
{
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"] + "";
+ object returnValue = resultTable.Columns.Contains("returnValue") ? resultTable.Rows[0]["returnValue"] : "";
for (int i = 0; i < commandParameters.Length; i++)
{
DbParameter sqlParameter = commandParameters[i];
@@ -390,7 +391,7 @@ namespace Lskj.Core
}
if (sqlParameter.Direction == ParameterDirection.Output)
{
- sqlParameter.Value = outputValue;
+ sqlParameter.Value = resultTable.Rows[0][$"outputValue{i}"];
}
}
}
@@ -401,7 +402,7 @@ namespace Lskj.Core
num = cmd.ExecuteNonQuery();
}
}
- else if (_connection is SqlConnection)
+ else if (connectionType == ConnectionType.SqlServer)
{
PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters);
num = cmd.ExecuteNonQuery();
@@ -445,7 +446,7 @@ namespace Lskj.Core
int num = 0;
try
{
- if (_connection is KdbndpConnection)
+ if (_connection is KdbndpConnection || connectionType == ConnectionType.DmServer)
{
if (cmdType == CommandType.StoredProcedure)
{
@@ -458,8 +459,7 @@ namespace Lskj.Core
{
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"] + "";
+ object returnValue = resultTable.Columns.Contains("returnValue") ? resultTable.Rows[0]["returnValue"] : "";
for (int i = 0; i < commandParameters.Length; i++)
{
DbParameter sqlParameter = commandParameters[i];
@@ -469,7 +469,7 @@ namespace Lskj.Core
}
if (sqlParameter.Direction == ParameterDirection.Output)
{
- sqlParameter.Value = outputValue;
+ sqlParameter.Value = resultTable.Rows[0][$"outputValue{i}"];
}
}
}
@@ -716,13 +716,23 @@ namespace Lskj.Core
{
try
{
- if (connectionType == ConnectionType.KdbnServer)
+ if (connectionType == ConnectionType.KdbnServer || connectionType == ConnectionType.DmServer)
{
- if (Connection.State == ConnectionState.Open)
+ if (connectionType == ConnectionType.KdbnServer)
{
- Connection.Close();
+ if (Connection.State == ConnectionState.Open)
+ {
+ Connection.Close();
+ }
+ Connection.Open();
+ }
+ else if (connectionType == ConnectionType.DmServer)
+ {
+ if (Connection.State != ConnectionState.Open)
+ {
+ Connection.Open();
+ }
}
- Connection.Open();
cmd.Connection = Connection;
cmd.CommandTimeout = CommandTimeout;
cmd.CommandText = cmdText;
@@ -730,22 +740,50 @@ namespace Lskj.Core
{
cmd.Transaction = trans;
}
- DbParameter[] kdbndpParameters = CastKdbndpParameterArray(cmdParms);
+ DbParameter[] dbParameters = CastParameterArray(cmdParms);
if (cmdType == CommandType.StoredProcedure)
{
string execSqlParas = "";
+ string outputParas = "";
+ StringBuilder stringBuilder = new StringBuilder();
+ bool hasReturnPara = false;
if (cmdParms != null)
{
- foreach (KdbndpParameter parameter in kdbndpParameters)
+ if (connectionType == ConnectionType.DmServer)
{
+ stringBuilder.AppendLine($"declare");
+ }
+ for (int i = 0; i < dbParameters.Length; i++)
+ {
+ DbParameter parameter = dbParameters[i];
if (parameter.Direction == ParameterDirection.ReturnValue)
{
+ if (connectionType == ConnectionType.KdbnServer)
+ {
+ stringBuilder.AppendLine($"declare @returnValue varchar(4000);");
+ }
+ else if (connectionType == ConnectionType.DmServer)
+ {
+ stringBuilder.AppendLine($"returnValue varchar(4000);");
+ }
+ hasReturnPara = true;
continue;
}
string value = (parameter.Value + "").Replace("'", "''");
if (parameter.Direction == ParameterDirection.Output)
{
- execSqlParas += $"@outputValue output,";
+ if (connectionType == ConnectionType.KdbnServer)
+ {
+ stringBuilder.AppendLine($"declare @outputValue{i} varchar(4000);");
+ outputParas += $"@outputValue{i} outputValue{i},";
+ execSqlParas += $"@outputValue{i} output,";
+ }
+ else if (connectionType == ConnectionType.DmServer)
+ {
+ stringBuilder.AppendLine($"outputValue{i} varchar(4000);");
+ outputParas += $"outputValue{i} outputValue{i},";
+ execSqlParas += $"outputValue{i},";
+ }
}
else
{
@@ -753,27 +791,43 @@ namespace Lskj.Core
}
}
}
- 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");
+ if (connectionType == ConnectionType.KdbnServer)
+ {
+ stringBuilder.AppendLine($"exec @returnValue = {cmdText} {execSqlParas.TrimEnd(',')};");
+ stringBuilder.AppendLine($"select @@ROWCOUNT execcount,@returnValue returnValue{(outputParas.Length > 0 ? $",{outputParas.TrimEnd(',')}" : "")};");
+ }
+ else if (connectionType == ConnectionType.DmServer)
+ {
+ stringBuilder.AppendLine($"begin");
+ stringBuilder.AppendLine($"call {cmdText} ({(hasReturnPara ? "returnValue," : "")}{execSqlParas.TrimEnd(',')});");
+ stringBuilder.AppendLine($"select SQL%ROWCOUNT execcount{(hasReturnPara ? ",returnValue returnValue" : "")}{(outputParas.Length > 0 ? $",{outputParas.TrimEnd(',')}" : "")};");
+ stringBuilder.AppendLine($"end");
+ }
cmd.CommandType = CommandType.Text;
cmd.CommandText = stringBuilder.ToString();
}
else
{
cmd.CommandText = cmdText;
+ if (connectionType == ConnectionType.DmServer)
+ {
+ cmd.CommandText = Regex.Replace(cmd.CommandText, @"\bdbo\.", "", RegexOptions.IgnoreCase);
+ cmd.CommandText = Regex.Replace(cmd.CommandText, @"(?
///
///
- public static DbParameter[] CastKdbndpParameterArray(DbParameter[] commandParameters)
+ public static DbParameter[] CastParameterArray(DbParameter[] commandParameters)
{
if (commandParameters == null)
{
return null;
}
- DbParameter[] kdbndpParameters = new DbParameter[commandParameters.Length];
+
+ DbParameter[] dbParameters = new DbParameter[commandParameters.Length];
for (int i = 0; i < commandParameters.Length; i++)
{
- DbParameter sqlParameter = commandParameters[i];
- kdbndpParameters[i] = CastKdbndpParameter(sqlParameter);
+ DbParameter parameter = commandParameters[i];
+ dbParameters[i] = CastDbParameter(parameter);
}
- return kdbndpParameters;
+ return dbParameters;
}
///
/// 转换为人大金仓参数
///
///
///
- public static DbParameter CastKdbndpParameter(DbParameter parameter)
+ public static DbParameter CastDbParameter(DbParameter parameter)
{
- KdbndpParameter kdbndpParameter = new KdbndpParameter();
- KdbndpDbType kdbndpDbType = KdbndpDbType.Text;
+ DbParameter dbParameter = dbFactory.CreateParameter();
if (parameter is SqlParameter sqlParameter)
{
- switch (sqlParameter.SqlDbType)
+ if (dbParameter is KdbndpParameter kdbndpParameter)
{
- 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
+ KdbndpDbType kdbndpDbType = KdbndpDbType.Text;
+ 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:
+ kdbndpDbType = KdbndpDbType.Varchar;
+ break;
+ case SqlDbType.Xml:
+ kdbndpDbType = KdbndpDbType.Xml;
+ break;
+ case SqlDbType.Date:
+ kdbndpDbType = KdbndpDbType.Date;
+ break;
+ case SqlDbType.Time:
+ kdbndpDbType = KdbndpDbType.Time;
+ break;
+ case SqlDbType.DateTime2:
+ kdbndpDbType = KdbndpDbType.DateTime2;
+ break;
+ }
+ kdbndpParameter.KdbndpDbType = kdbndpDbType;
+ }
+ else if (dbParameter is DmParameter dmParameter)
+ {
+ DmDbType dmDbType = DmDbType.Text;
+ switch (sqlParameter.SqlDbType)
+ {
+ case SqlDbType.BigInt:
+ dmDbType = DmDbType.Int64;
+ break;
+ case SqlDbType.Binary:
+ dmDbType = DmDbType.Binary;
+ break;
+ case SqlDbType.Bit:
+ dmDbType = DmDbType.Bit;
+ break;
+ case SqlDbType.Char:
+ dmDbType = DmDbType.Char;
+ break;
+ case SqlDbType.DateTime:
+ dmDbType = DmDbType.DateTime;
+ break;
+ case SqlDbType.Decimal:
+ dmDbType = DmDbType.Decimal;
+ break;
+ case SqlDbType.Float:
+ dmDbType = DmDbType.Float;
+ break;
+ case SqlDbType.Int:
+ dmDbType = DmDbType.Int32;
+ break;
+ break;
+ case SqlDbType.NText:
+ dmDbType = DmDbType.Text;
+ break;
+ case SqlDbType.NVarChar:
+ dmDbType = DmDbType.Text;
+ break;
+ case SqlDbType.SmallInt:
+ dmDbType = DmDbType.Int16;
+ break;
+ case SqlDbType.Text:
+ dmDbType = DmDbType
\ No newline at end of file