mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-22 20:13:41 +08:00
修复DB2 V11.5版本变量参数化异常问题
This commit is contained in:
@@ -9,17 +9,17 @@ namespace SqlSugar.DB2
|
||||
public override string GetDbTypeName(string csharpTypeName)
|
||||
{
|
||||
if (csharpTypeName == UtilConstants.ByteArrayType.Name)
|
||||
return "bytea";
|
||||
if (csharpTypeName.ToLower() == "int32")
|
||||
return "varbinary";
|
||||
if (csharpTypeName.ToLower().IsIn("int","int32"))
|
||||
csharpTypeName = "int";
|
||||
if (csharpTypeName.ToLower() == "int16")
|
||||
else if (csharpTypeName.ToLower() == "int16")
|
||||
csharpTypeName = "short";
|
||||
if (csharpTypeName.ToLower() == "int64")
|
||||
else if (csharpTypeName.ToLower() == "int64")
|
||||
csharpTypeName = "long";
|
||||
if (csharpTypeName.ToLower().IsIn("boolean", "bool"))
|
||||
else if (csharpTypeName.ToLower().IsIn("boolean", "bool"))
|
||||
csharpTypeName = "bool";
|
||||
if (csharpTypeName == "DateTimeOffset")
|
||||
csharpTypeName = "DateTime";
|
||||
else if (csharpTypeName.ToLower().IsIn("dateTime","datetimeoffset"))
|
||||
csharpTypeName = "dateTime";
|
||||
var mappings = this.MappingTypes.Where(it => it.Value.ToString().Equals(csharpTypeName, StringComparison.CurrentCultureIgnoreCase)).ToList();
|
||||
if (mappings != null && mappings.Count > 0)
|
||||
return mappings.First().Key;
|
||||
@@ -30,22 +30,26 @@ namespace SqlSugar.DB2
|
||||
{
|
||||
dbTypeName = dbTypeName.ToLower();
|
||||
var propertyTypes = MappingTypes.Where(it => it.Value.ToString().ToLower() == dbTypeName || it.Key.ToLower() == dbTypeName);
|
||||
if (propertyTypes == null)
|
||||
if (propertyTypes == null || !propertyTypes.Any())
|
||||
{
|
||||
return "other";
|
||||
return "string";
|
||||
}
|
||||
else if (dbTypeName == "xml" || dbTypeName == "string" || dbTypeName == "jsonb" || dbTypeName == "json")
|
||||
{
|
||||
return "string";
|
||||
}
|
||||
else if (dbTypeName == "bpchar")//数据库char datatype 查询出来的时候是 bpchar
|
||||
else if (dbTypeName == "character")
|
||||
{
|
||||
return "char";
|
||||
}
|
||||
if (dbTypeName == "byte[]")
|
||||
else if (dbTypeName == "byte[]")
|
||||
{
|
||||
return "byte[]";
|
||||
}
|
||||
else if (dbTypeName == "boolean")
|
||||
{
|
||||
return "char";
|
||||
}
|
||||
else if (propertyTypes == null || propertyTypes.Count() == 0)
|
||||
{
|
||||
if (dbTypeName.StartsWith("_"))
|
||||
@@ -82,6 +86,8 @@ namespace SqlSugar.DB2
|
||||
}
|
||||
public static List<KeyValuePair<string, CSharpDataType>> MappingTypesConst = new List<KeyValuePair<string, CSharpDataType>>(){
|
||||
|
||||
|
||||
new KeyValuePair<string, CSharpDataType>("boolean",CSharpDataType.@bool),
|
||||
new KeyValuePair<string, CSharpDataType>("varbinary",CSharpDataType.@byteArray),
|
||||
new KeyValuePair<string, CSharpDataType>("binary",CSharpDataType.@byteArray),
|
||||
new KeyValuePair<string, CSharpDataType>("blob",CSharpDataType.@byteArray),
|
||||
@@ -89,6 +95,7 @@ namespace SqlSugar.DB2
|
||||
new KeyValuePair<string, CSharpDataType>("varchar",CSharpDataType.@string),
|
||||
new KeyValuePair<string, CSharpDataType>("char",CSharpDataType.@string),
|
||||
new KeyValuePair<string, CSharpDataType>("clob",CSharpDataType.@string),
|
||||
new KeyValuePair<string, CSharpDataType>("vargraphic",CSharpDataType.@string),
|
||||
|
||||
new KeyValuePair<string, CSharpDataType>("timestamp",CSharpDataType.@DateTime),
|
||||
new KeyValuePair<string, CSharpDataType>("date",CSharpDataType.@DateTime),
|
||||
@@ -113,5 +120,28 @@ namespace SqlSugar.DB2
|
||||
return new List<string>() { "int32", "datetime", "decimal", "double", "byte" };
|
||||
}
|
||||
}
|
||||
|
||||
public static List<KeyValuePair<string, System.Data.DbType>> MappingDbTypesConst = new List<KeyValuePair<string, System.Data.DbType>>(){
|
||||
|
||||
|
||||
new KeyValuePair<string, System.Data.DbType>("boolean",System.Data.DbType.Boolean),
|
||||
new KeyValuePair<string, System.Data.DbType>("varbinary",System.Data.DbType.Byte),
|
||||
new KeyValuePair<string, System.Data.DbType>("varchar",System.Data.DbType.String),
|
||||
|
||||
new KeyValuePair<string, System.Data.DbType>("date",System.Data.DbType.Date),
|
||||
new KeyValuePair<string, System.Data.DbType>("time",System.Data.DbType.Time),
|
||||
new KeyValuePair<string, System.Data.DbType>("timestamp",System.Data.DbType.DateTime),
|
||||
new KeyValuePair<string, System.Data.DbType>("timestamp",System.Data.DbType.DateTime2),
|
||||
new KeyValuePair<string, System.Data.DbType>("timestamp",System.Data.DbType.DateTimeOffset),
|
||||
|
||||
new KeyValuePair<string, System.Data.DbType>("integer",System.Data.DbType.Int32),
|
||||
new KeyValuePair<string, System.Data.DbType>("smallint",System.Data.DbType.Int16),
|
||||
new KeyValuePair<string, System.Data.DbType>("bigint",System.Data.DbType.Int64),
|
||||
|
||||
new KeyValuePair<string, System.Data.DbType>("float",System.Data.DbType.Single),
|
||||
new KeyValuePair<string, System.Data.DbType>("double",System.Data.DbType.Double),
|
||||
new KeyValuePair<string, System.Data.DbType>("numeric",System.Data.DbType.VarNumeric),
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@@ -1,4 +1,5 @@
|
||||
using System.Linq;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
@@ -6,6 +7,11 @@ namespace SqlSugar.DB2
|
||||
{
|
||||
public partial class DB2QueryBuilder : QueryBuilder
|
||||
{
|
||||
/// <summary>
|
||||
/// 静态常量标志
|
||||
/// </summary>
|
||||
private string[] constanFlag = new string[] { "@const", "@constan" };
|
||||
|
||||
#region Sql Template
|
||||
public override string PageTempalte
|
||||
{
|
||||
@@ -133,11 +139,41 @@ namespace SqlSugar.DB2
|
||||
{
|
||||
result = SubToListMethod(result);
|
||||
}
|
||||
result = ConstanParameterized(result);
|
||||
return result;
|
||||
//return result.Replace("\"", "").ToUpper();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 常量参数化
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private string ConstanParameterized(string selectSql)
|
||||
{
|
||||
var selectParams = selectSql.Split(",").Select(p =>
|
||||
{
|
||||
if (!constanFlag.Any(t => p.ToLower().Contains(t))) return p;
|
||||
var parameter = this.Parameters.FirstOrDefault(t => p.Contains(t.ParameterName));
|
||||
if (parameter == null) return p;
|
||||
|
||||
var dbType = DB2DbBind.MappingDbTypesConst.FirstOrDefault(t => parameter.DbType == t.Value);
|
||||
if (default(KeyValuePair<string, System.Data.DbType>).Equals(dbType)) return p;
|
||||
var parameterized = string.Empty;
|
||||
if (dbType.Value == System.Data.DbType.String)
|
||||
{
|
||||
var size = string.IsNullOrEmpty(parameter.Value?.ToString()) ? 1 : System.Text.Encoding.Default.GetBytes(parameter.Value?.ToString()).Length;;
|
||||
parameterized = $"{dbType.Key.ToUpper()}({size})";
|
||||
}
|
||||
else
|
||||
{
|
||||
parameterized = $"{dbType.Key.ToUpper()}";
|
||||
}
|
||||
return p.Replace(parameter.ParameterName, $" CAST({parameter.ParameterName} AS {parameterized}) ");
|
||||
});
|
||||
return string.Join(",", selectParams);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user