代码生成器生成ORM报错:不能在 colLength 列中存储 <18,2>。所需类型是 Int32。
作者:C/S框架网|www.csframewo  发布日期:2021-07-16 19:33:01
  代码生成器生成ORM报错:不能在 colLength 列中存储 <18,2>。所需类型是 Int32。



输入字符串的格式不正确。不能在 colLength 列中存储 <18,2>。所需类型是 Int32。


贴图图片-代码生成器生成ORM报错


错误原因:


IDatabase.meta_GetTableStru()方法返回一个DataTable对象(对应表结构数据、meta元数据),DataTable中FieldLength字段类型是Int类型,获取MySQL数据库的表结构时,若有字段定义Decimal(18,2),则返回<18,2>字符串,导致数据类型不匹配,产生系统异常。


注:MsSQL数据库正常, Oracle未测试。



解决方案:


打开ORMTools.cs文件,修改如下:



贴图图片-代码生成器生成ORM报错1




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






C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务
上一篇 下一篇