SVN r1074

SVN-Revision: r1074
This commit is contained in:
tdx
2025-12-09 08:57:53 +00:00
parent cb1f3b71c5
commit 270a6b46f7
+209 -95
View File
@@ -1,4 +1,5 @@
using Kdbndp; using Dm;
using Kdbndp;
using KdbndpTypes; using KdbndpTypes;
using System; using System;
using System.Data; using System.Data;
@@ -6,6 +7,7 @@ using System.Data.Common;
using System.Data.SqlClient; using System.Data.SqlClient;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
namespace Lskj.Core namespace Lskj.Core
{ {
@@ -366,7 +368,7 @@ namespace Lskj.Core
int num = 0; int num = 0;
try try
{ {
if (_connection is KdbndpConnection) if (connectionType == ConnectionType.KdbnServer || connectionType == ConnectionType.DmServer)
{ {
if (cmdType == CommandType.StoredProcedure) if (cmdType == CommandType.StoredProcedure)
{ {
@@ -379,8 +381,7 @@ namespace Lskj.Core
{ {
DataTable resultTable = dataSet.Tables[dataSet.Tables.Count - 1]; DataTable resultTable = dataSet.Tables[dataSet.Tables.Count - 1];
int.TryParse(resultTable.Rows[0]["execcount"] + "", out num); int.TryParse(resultTable.Rows[0]["execcount"] + "", out num);
string returnValue = resultTable.Rows[0]["returnValue"] + ""; object returnValue = resultTable.Columns.Contains("returnValue") ? resultTable.Rows[0]["returnValue"] : "";
string outputValue = resultTable.Rows[0]["outputValue"] + "";
for (int i = 0; i < commandParameters.Length; i++) for (int i = 0; i < commandParameters.Length; i++)
{ {
DbParameter sqlParameter = commandParameters[i]; DbParameter sqlParameter = commandParameters[i];
@@ -390,7 +391,7 @@ namespace Lskj.Core
} }
if (sqlParameter.Direction == ParameterDirection.Output) 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(); num = cmd.ExecuteNonQuery();
} }
} }
else if (_connection is SqlConnection) else if (connectionType == ConnectionType.SqlServer)
{ {
PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters); PrepareCommand(cmd, _connection, null, cmdType, cmdText, commandParameters);
num = cmd.ExecuteNonQuery(); num = cmd.ExecuteNonQuery();
@@ -445,7 +446,7 @@ namespace Lskj.Core
int num = 0; int num = 0;
try try
{ {
if (_connection is KdbndpConnection) if (_connection is KdbndpConnection || connectionType == ConnectionType.DmServer)
{ {
if (cmdType == CommandType.StoredProcedure) if (cmdType == CommandType.StoredProcedure)
{ {
@@ -458,8 +459,7 @@ namespace Lskj.Core
{ {
DataTable resultTable = dataSet.Tables[dataSet.Tables.Count - 1]; DataTable resultTable = dataSet.Tables[dataSet.Tables.Count - 1];
int.TryParse(resultTable.Rows[0]["execcount"] + "", out num); int.TryParse(resultTable.Rows[0]["execcount"] + "", out num);
string returnValue = resultTable.Rows[0]["returnValue"] + ""; object returnValue = resultTable.Columns.Contains("returnValue") ? resultTable.Rows[0]["returnValue"] : "";
string outputValue = resultTable.Rows[0]["outputValue"] + "";
for (int i = 0; i < commandParameters.Length; i++) for (int i = 0; i < commandParameters.Length; i++)
{ {
DbParameter sqlParameter = commandParameters[i]; DbParameter sqlParameter = commandParameters[i];
@@ -469,7 +469,7 @@ namespace Lskj.Core
} }
if (sqlParameter.Direction == ParameterDirection.Output) if (sqlParameter.Direction == ParameterDirection.Output)
{ {
sqlParameter.Value = outputValue; sqlParameter.Value = resultTable.Rows[0][$"outputValue{i}"];
} }
} }
} }
@@ -716,13 +716,23 @@ namespace Lskj.Core
{ {
try 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.Connection = Connection;
cmd.CommandTimeout = CommandTimeout; cmd.CommandTimeout = CommandTimeout;
cmd.CommandText = cmdText; cmd.CommandText = cmdText;
@@ -730,22 +740,50 @@ namespace Lskj.Core
{ {
cmd.Transaction = trans; cmd.Transaction = trans;
} }
DbParameter[] kdbndpParameters = CastKdbndpParameterArray(cmdParms); DbParameter[] dbParameters = CastParameterArray(cmdParms);
if (cmdType == CommandType.StoredProcedure) if (cmdType == CommandType.StoredProcedure)
{ {
string execSqlParas = ""; string execSqlParas = "";
string outputParas = "";
StringBuilder stringBuilder = new StringBuilder();
bool hasReturnPara = false;
if (cmdParms != null) 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 (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; continue;
} }
string value = (parameter.Value + "").Replace("'", "''"); string value = (parameter.Value + "").Replace("'", "''");
if (parameter.Direction == ParameterDirection.Output) 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 else
{ {
@@ -753,27 +791,43 @@ namespace Lskj.Core
} }
} }
} }
StringBuilder stringBuilder = new StringBuilder(); if (connectionType == ConnectionType.KdbnServer)
stringBuilder.AppendLine("declare @returnValue varchar(max)"); {
stringBuilder.AppendLine("declare @outputValue varchar(max)"); stringBuilder.AppendLine($"exec @returnValue = {cmdText} {execSqlParas.TrimEnd(',')};");
stringBuilder.AppendLine($"exec @returnValue = {cmdText} {execSqlParas.TrimEnd(',')}"); stringBuilder.AppendLine($"select @@ROWCOUNT execcount,@returnValue returnValue{(outputParas.Length > 0 ? $",{outputParas.TrimEnd(',')}" : "")};");
stringBuilder.AppendLine("select @@ROWCOUNT execcount,@returnValue returnValue,@outputValue outputValue"); }
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.CommandType = CommandType.Text;
cmd.CommandText = stringBuilder.ToString(); cmd.CommandText = stringBuilder.ToString();
} }
else else
{ {
cmd.CommandText = cmdText; cmd.CommandText = cmdText;
if (connectionType == ConnectionType.DmServer)
{
cmd.CommandText = Regex.Replace(cmd.CommandText, @"\bdbo\.", "", RegexOptions.IgnoreCase);
cmd.CommandText = Regex.Replace(cmd.CommandText, @"(?<![a-zA-Z0-9_])model(?![a-zA-Z0-9_])", "\"model\"", RegexOptions.IgnoreCase);
}
if (cmdParms != null) if (cmdParms != null)
{ {
foreach (KdbndpParameter parameter in kdbndpParameters) foreach (DbParameter parameter in dbParameters)
{ {
cmd.Parameters.Add(parameter); cmd.Parameters.Add(parameter);
if (connectionType == ConnectionType.DmServer)
{
cmd.CommandText = cmd.CommandText.Replace(parameter.ParameterName, $":{parameter.ParameterName.TrimStart('@')}");
}
} }
} }
} }
} }
else if (connectionType == ConnectionType.SqlServer || connectionType == ConnectionType.DmServer) else if (connectionType == ConnectionType.SqlServer)
{ {
if (Connection.State != ConnectionState.Open) if (Connection.State != ConnectionState.Open)
{ {
@@ -809,92 +863,152 @@ namespace Lskj.Core
/// </summary> /// </summary>
/// <param name="commandParameters"></param> /// <param name="commandParameters"></param>
/// <returns></returns> /// <returns></returns>
public static DbParameter[] CastKdbndpParameterArray(DbParameter[] commandParameters) public static DbParameter[] CastParameterArray(DbParameter[] commandParameters)
{ {
if (commandParameters == null) if (commandParameters == null)
{ {
return null; return null;
} }
DbParameter[] kdbndpParameters = new DbParameter[commandParameters.Length];
DbParameter[] dbParameters = new DbParameter[commandParameters.Length];
for (int i = 0; i < commandParameters.Length; i++) for (int i = 0; i < commandParameters.Length; i++)
{ {
DbParameter sqlParameter = commandParameters[i]; DbParameter parameter = commandParameters[i];
kdbndpParameters[i] = CastKdbndpParameter(sqlParameter); dbParameters[i] = CastDbParameter(parameter);
} }
return kdbndpParameters; return dbParameters;
} }
/// <summary> /// <summary>
/// 转换为人大金仓参数 /// 转换为人大金仓参数
/// </summary> /// </summary>
/// <param name="sqlParameter"></param> /// <param name="sqlParameter"></param>
/// <returns></returns> /// <returns></returns>
public static DbParameter CastKdbndpParameter(DbParameter parameter) public static DbParameter CastDbParameter(DbParameter parameter)
{ {
KdbndpParameter kdbndpParameter = new KdbndpParameter(); DbParameter dbParameter = dbFactory.CreateParameter();
KdbndpDbType kdbndpDbType = KdbndpDbType.Text;
if (parameter is SqlParameter sqlParameter) if (parameter is SqlParameter sqlParameter)
{ {
switch (sqlParameter.SqlDbType) if (dbParameter is KdbndpParameter kdbndpParameter)
{ {
case SqlDbType.BigInt: KdbndpDbType kdbndpDbType = KdbndpDbType.Text;
kdbndpDbType = KdbndpDbType.SqlServer_Bigint; switch (sqlParameter.SqlDbType)
break; {
case SqlDbType.Binary: case SqlDbType.BigInt:
kdbndpDbType = KdbndpDbType.SqlServer_Binary; kdbndpDbType = KdbndpDbType.SqlServer_Bigint;
break; break;
case SqlDbType.Bit: case SqlDbType.Binary:
kdbndpDbType = KdbndpDbType.Bit; kdbndpDbType = KdbndpDbType.SqlServer_Binary;
break; break;
case SqlDbType.Char: case SqlDbType.Bit:
kdbndpDbType = KdbndpDbType.Char; kdbndpDbType = KdbndpDbType.Bit;
break; break;
case SqlDbType.DateTime: case SqlDbType.Char:
kdbndpDbType = KdbndpDbType.DateTime; kdbndpDbType = KdbndpDbType.Char;
break; break;
case SqlDbType.Decimal: case SqlDbType.DateTime:
kdbndpDbType = KdbndpDbType.SqlServer_Numeric; kdbndpDbType = KdbndpDbType.DateTime;
break; break;
case SqlDbType.Float: case SqlDbType.Decimal:
kdbndpDbType = KdbndpDbType.SqlServer_Float; kdbndpDbType = KdbndpDbType.SqlServer_Numeric;
break; break;
case SqlDbType.Image: case SqlDbType.Float:
kdbndpDbType = KdbndpDbType.Image; kdbndpDbType = KdbndpDbType.SqlServer_Float;
break; break;
case SqlDbType.Int: case SqlDbType.Image:
kdbndpDbType = KdbndpDbType.SqlServer_Int; kdbndpDbType = KdbndpDbType.Image;
break; break;
case SqlDbType.Money: case SqlDbType.Int:
kdbndpDbType = KdbndpDbType.SqlServer_Money; kdbndpDbType = KdbndpDbType.SqlServer_Int;
break; break;
case SqlDbType.NChar: case SqlDbType.Money:
kdbndpDbType = KdbndpDbType.NChar; kdbndpDbType = KdbndpDbType.SqlServer_Money;
break; break;
case SqlDbType.NText: case SqlDbType.NChar:
kdbndpDbType = KdbndpDbType.Ntext; kdbndpDbType = KdbndpDbType.NChar;
break; break;
case SqlDbType.NVarChar: case SqlDbType.NText:
kdbndpDbType = KdbndpDbType.Text; kdbndpDbType = KdbndpDbType.Ntext;
break; break;
case SqlDbType.Real: case SqlDbType.NVarChar:
kdbndpDbType = KdbndpDbType.SqlServer_Real; kdbndpDbType = KdbndpDbType.Text;
break; break;
case SqlDbType.SmallDateTime: case SqlDbType.Real:
kdbndpDbType = KdbndpDbType.SmallDateTime; kdbndpDbType = KdbndpDbType.SqlServer_Real;
break; break;
case SqlDbType.SmallInt: case SqlDbType.SmallDateTime:
kdbndpDbType = KdbndpDbType.SqlServer_Smallint; kdbndpDbType = KdbndpDbType.SmallDateTime;
break; break;
case SqlDbType.Text: case SqlDbType.SmallInt:
kdbndpDbType = KdbndpDbType.Text; kdbndpDbType = KdbndpDbType.SqlServer_Smallint;
break; break;
case SqlDbType.Timestamp: case SqlDbType.Text:
kdbndpDbType = KdbndpDbType.Timestamp; kdbndpDbType = KdbndpDbType.Text;
break; break;
case SqlDbType.TinyInt: case SqlDbType.Timestamp:
kdbndpDbType = KdbndpDbType.SqlServer_Tinyint; kdbndpDbType = KdbndpDbType.Timestamp;
break; break;
case SqlDbType.VarBinary: case SqlDbType.TinyInt:
kdbndpDbType = KdbndpDbType.SqlServer_VarBinary; kdbndpDbType = KdbndpDbType.SqlServer_Tinyint;
break; break;
case SqlDbType.VarChar: case SqlDbType.VarBinary:
kdbndp 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