代码生成器生成ORM报错:不能在 colLength 列中存储 <18,2>。所需类型是 Int32。

  代码生成器生成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框架网|原创作品.质量保障.竭诚为您服务
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
发表评论

评论内容
昵称:
关联文章

代码生成器生成ORM不能 colLength 存储 <18,2>。类型 Int32
C#.NET 查询MYSQL:值类型类型不匹配不能存储<0001-01-01 00:00:00>。类型MySqlDateTime
C#.NET给DataTable日期类型赋值类型 MySqlDateTime,值类型类型不匹配
2.6生成ORM
CSFramework代码生成器生成三种ORM模型类(静态类ORM,实体类ORM,标准对象)
代码生成器加载用户表和视图解决方案|C/S框架网
ClassGenerator V2.01 生成ORM源码
ASP.NET编译网站:未能加载类型.Global.asax,把CodeBehind改为CodeFile即可
CSFramework代码生成器根据数据库表结构生成实体对象模型(C#代码
ORM模型(ORM Model)
生成的项目模块(Project)添加到VS解决方案 - C/S框架三层架构代码生成器操作指南
C/S框架后台数据更新模型之ORM自动生成SQL基本原理
CSFramework C#代码生成器生成窗体界面UI,BLL,DAL,Model,WCF接口层源代码
什么ORM?
CSFramework代码生成器自动生成主从表界面-C/S框架网
ClassGenerator(ORM生成器)下载
2.8生成DAL
2.7生成BLL
2.3代码生成器主界面
C# 更新SQL数据发生错误:不能创建大小为 8133 的行,该大小大于允许的最大行大小 8060。