SVN r1074
SVN-Revision: r1074
This commit is contained in:
+209
-95
@@ -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, @"(?<![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,92 +863,152 @@ 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)
|
||||
{
|
||||
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
|
||||
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
|
||||
Reference in New Issue
Block a user