SVN r1074

SVN-Revision: r1074
This commit is contained in:
tdx
2025-12-09 08:57:53 +00:00
parent cb1f3b71c5
commit 270a6b46f7
+143 -29
View File
@@ -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}"];
}
}
}
@@ -715,6 +715,8 @@ namespace Lskj.Core
private static void PrepareCommand(DbCommand cmd, DbConnection Connection, DbTransaction trans, CommandType cmdType, string cmdText, DbParameter[] cmdParms)
{
try
{
if (connectionType == ConnectionType.KdbnServer || connectionType == ConnectionType.DmServer)
{
if (connectionType == ConnectionType.KdbnServer)
{
@@ -723,6 +725,14 @@ namespace Lskj.Core
Connection.Close();
}
Connection.Open();
}
else if (connectionType == ConnectionType.DmServer)
{
if (Connection.State != ConnectionState.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, @"(?<![a-zA-Z0-9_])model(?![a-zA-Z0-9_])", "\"model\"", RegexOptions.IgnoreCase);
}
if (cmdParms != null)
{
foreach (KdbndpParameter parameter in kdbndpParameters)
foreach (DbParameter parameter in dbParameters)
{
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)
{
@@ -809,31 +863,34 @@ namespace Lskj.Core
/// </summary>
/// <param name="commandParameters"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 转换为人大金仓参数
/// </summary>
/// <param name="sqlParameter"></param>
/// <returns></returns>
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)
{
if (dbParameter is KdbndpParameter kdbndpParameter)
{
KdbndpDbType kdbndpDbType = KdbndpDbType.Text;
switch (sqlParameter.SqlDbType)
{
case SqlDbType.BigInt:
@@ -897,4 +954,61 @@ namespace Lskj.Core
kdbndpDbType = KdbndpDbType.SqlServer_VarBinary;
break;
case SqlDbType.VarChar:
kdbndp
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