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 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
|
||||||
Reference in New Issue
Block a user