代码生成器生成ORM报错:不能在 colLength 列中存储 <18,2>。所需类型是 Int32。
代码生成器生成ORM报错:不能在 colLength 列中存储 <18 ,2="">。所需类型是 Int32。18>
输入字符串的格式不正确。不能在 colLength 列中存储 <18,2>。所需类型是 Int32。
扫一扫加作者微信
错误原因:
IDatabase.meta_GetTableStru()方法返回一个DataTable对象(对应表结构数据、meta元数据),DataTable中FieldLength字段类型是Int类型,获取MySQL数据库的表结构时,若有字段定义Decimal(18,2),则返回<18,2>字符串,导致数据类型不匹配,产生系统异常。
注:MsSQL数据库正常, Oracle未测试。
解决方案:
打开ORMTools.cs文件,修改如下:
C# Code:
/// <summary>
/// 获取字段的数据长度
/// </summary>
/// <param name="drMeta">表结构元数据</param>
/// <returns></returns>
private static int GetLength(DataRow drMeta)
{
string lenText = ConvertEx.ToString(drMeta["FieldLength"]);
string prec = ConvertEx.ToString(drMeta["Prec"]);//精度,Mysql对应的是数据长度
if (String.IsNullOrWhiteSpace(lenText)) return 0;
//FieldLength的值:18,2
if (lenText.IndexOf(",") > 0)
{
var datas = lenText.Split(',');
if (datas.Length == 2)
return ConvertEx.ToInt(datas[0]);//返回18
else if (!String.IsNullOrEmpty(prec))
return ConvertEx.ToInt(prec);//返回精度的值
else
return 0;//返回默认值
}
else
{
return ConvertEx.ToInt(lenText);
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// <summary>
/// 获取字段的数据长度
/// </summary>
/// <param name="drMeta">表结构元数据</param>
/// <returns></returns>
private static int GetLength(DataRow drMeta)
{
string lenText = ConvertEx.ToString(drMeta["FieldLength"]);
string prec = ConvertEx.ToString(drMeta["Prec"]);//精度,Mysql对应的是数据长度
if (String.IsNullOrWhiteSpace(lenText)) return 0;
//FieldLength的值:18,2
if (lenText.IndexOf(",") > 0)
{
var datas = lenText.Split(',');
if (datas.Length == 2)
return ConvertEx.ToInt(datas[0]);//返回18
else if (!String.IsNullOrEmpty(prec))
return ConvertEx.ToInt(prec);//返回精度的值
else
return 0;//返回默认值
}
else
{
return ConvertEx.ToInt(lenText);
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
扫一扫加作者微信
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网