MySQLDriverCS 不支持问题解决 Uint 4.0 .net 2.0
转:_Sin
项目需要要有C#访问Mysql数据库,MySQL.Data.dll 这个库不知道什么原因,读以前的数据库时,字符类型是乱码。
没办法只能用 MySQLDriverCS-n-EasyQueryTools-4.0.0-DotNet2.0
中文参考手册http://www.yesky.com/imagesnew/s ... nual_Reference.html
安装用了后发现问题,不支持Uint,当数据库中值在4294967295/2~4294967295就会报错。
项目不是很急,查源码。
发现CPrototypes.cs里MysqltoNetType
else if (type == (uint)enum_field_types_5.FIELD_TYPE_INT24 ||
type == (uint)enum_field_types_5.FIELD_TYPE_LONG)
{
return System.Type.GetType("System.Int32"
}
统一返回的Int32,需要添加一个分支
发现没得标识说明,查资料后发现Flags可以用,于是修改C#源码的类结构
- /// <summary>
- /// Interface extended by different MySQL_FIELD versions.
- /// </summary>
- public interface IMYSQL_FIELD
- {
- /// <summary>
- /// Div flagsdefine('NOT_NULL_FLAG', 1);
- /// define('PRI_KEY_FLAG', 2);
- /// define('UNIQUE_KEY_FLAG', 4);
- /// define('MULTIPLE_KEY_FLAG', 8);
- /// define('BLOB_FLAG', 16);
- /// define('UNSIGNED_FLAG', 32);
- /// define('ZEROFILL_FLAG', 64);
- /// define('BINARY_FLAG', 128);
- /// define('ENUM_FLAG', 256);
- /// define('AUTO_INCREMENT_FLAG', 512);
- /// define('TIMESTAMP_FLAG', 1024);
- /// define('SET_FLAG', 2048);
- /// define('NUM_FLAG', 32768);
- /// define('PART_KEY_FLAG', 16384);
- /// define('UNIQUE_FLAG', 65536);
- /// </summary>
- uint Flags{get;}
- /// <summary>
- /// Name of column
- /// </summary>
- string Name{get;}
- /// <summary>
- /// Type of field
- /// </summary>
- uint Type{get;set;}
- /// <summary>
- /// Max width for selected set
- /// </summary>
- long Max_Length {get;set;}
- /// <summary>
- /// Width of column (create length)
- /// </summary>
- uint Length{get;}
- }
复制代码实现了功能,麻烦二:一,非托管到托管的处理,不清楚内存结构。二,C写的结构不清楚查了很才查得Enmu值。
一共修改的两上上传记录一下,
最后又发现一个问题,MySQL中的VARBINARY被转换在string,处理有问题。还没发现解决方法
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论