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

参考文档:
C#.NET 查询MYSQL报错:值类型与列类型不匹配不能在列中存储 。所需类型是MySqlDateTime
C#.NET给DataTable日期类型的列赋值报错:所需类型是 MySqlDateTime,值类型与列类型不匹配
FastReport.NET报错 System.PlatformNotSupportedException:“Operation is not supported on this platform.”
使用Winform代码生成器生成FastReport.NET报表模板文件(frx文件)
CSFramework代码生成器生成三种ORM模型类(静态类ORM,实体类ORM,标准对象)
基于C# Winform三层框架打造的C/S系统开发平台成功案例(2008-2018年)
.NET代码生成器V6.1 - 快速生成Winform窗体代码
C# Winform代码生成器新功能 - 生成表格编辑窗体
企业级C/S系统快速开发框架(Winform+.NET8+EFCore)|C/S开发框架
关于ORM实体类主键设置的几点建议(Tag:复合主键,ISID,PK)|C/S开发框架
Winform软件开发框架|快速开发平台推荐|C/S开发框架
DevExpress组件版本下载、安装与VS开发环境 | Winform C/S框架|C/S开发框架
WinFormsApp窗体应用快速开发框架(.NET7+EFCore+VS2022)
VS2022窗体设计器保存报错:应有两个或多个类部件
Winform C/S结构与Web B/S结构开发MES/ERP系统优缺点及区别|C/S开发框架
UserConfig类详解 | Winform 蝇量级开发框架|C/S开发框架
C#.NET 查询MYSQL报错:值类型与列类型不匹配不能在列中存储 。所需类型是MySqlDateTime
C#.NET给DataTable日期类型的列赋值报错:所需类型是 MySqlDateTime,值类型与列类型不匹配
FastReport.NET报错 System.PlatformNotSupportedException:“Operation is not supported on this platform.”
使用Winform代码生成器生成FastReport.NET报表模板文件(frx文件)
CSFramework代码生成器生成三种ORM模型类(静态类ORM,实体类ORM,标准对象)
基于C# Winform三层框架打造的C/S系统开发平台成功案例(2008-2018年)
.NET代码生成器V6.1 - 快速生成Winform窗体代码
C# Winform代码生成器新功能 - 生成表格编辑窗体
企业级C/S系统快速开发框架(Winform+.NET8+EFCore)|C/S开发框架
关于ORM实体类主键设置的几点建议(Tag:复合主键,ISID,PK)|C/S开发框架
Winform软件开发框架|快速开发平台推荐|C/S开发框架
DevExpress组件版本下载、安装与VS开发环境 | Winform C/S框架|C/S开发框架
WinFormsApp窗体应用快速开发框架(.NET7+EFCore+VS2022)
VS2022窗体设计器保存报错:应有两个或多个类部件
Winform C/S结构与Web B/S结构开发MES/ERP系统优缺点及区别|C/S开发框架
UserConfig类详解 | Winform 蝇量级开发框架|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
