免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2260 | 回复: 0

MySQLDriverCS 不支持问题解决 Uint 4.0 .net 2.0 [复制链接]

论坛徽章:
0
发表于 2011-03-03 23:02 |显示全部楼层
转:_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#源码的类结构
  1. /// <summary>
  2. ///  Interface extended by different MySQL_FIELD versions.
  3. /// </summary>
  4. public interface IMYSQL_FIELD
  5. {
  6.         /// <summary>
  7.         /// Div flagsdefine('NOT_NULL_FLAG',         1);
  8.         /// define('PRI_KEY_FLAG',          2);
  9.         /// define('UNIQUE_KEY_FLAG',       4);
  10.         /// define('MULTIPLE_KEY_FLAG',     8);
  11.         /// define('BLOB_FLAG',            16);
  12.         /// define('UNSIGNED_FLAG',        32);
  13.         /// define('ZEROFILL_FLAG',        64);
  14.         /// define('BINARY_FLAG',         128);
  15.         /// define('ENUM_FLAG',           256);
  16.         /// define('AUTO_INCREMENT_FLAG', 512);
  17.         /// define('TIMESTAMP_FLAG',     1024);
  18.         /// define('SET_FLAG',           2048);
  19.         /// define('NUM_FLAG',          32768);
  20.         /// define('PART_KEY_FLAG',     16384);
  21.         /// define('UNIQUE_FLAG',       65536);
  22.         /// </summary>
  23.         uint Flags{get;}
  24.   /// <summary>
  25.   /// Name of column
  26.   /// </summary>
  27.   string Name{get;}
  28.   /// <summary>
  29.   /// Type of field
  30.   /// </summary>
  31.   uint Type{get;set;}
  32.   /// <summary>
  33.   /// Max width for selected set
  34.   /// </summary>
  35.   long Max_Length {get;set;}
  36.   /// <summary>
  37.   /// Width of column (create length)
  38.   /// </summary>
  39.   uint Length{get;}
  40. }
复制代码
实现了功能,麻烦二:一,非托管到托管的处理,不清楚内存结构。二,C写的结构不清楚查了很才查得Enmu值。

一共修改的两上上传记录一下,

最后又发现一个问题,MySQL中的VARBINARY被转换在string,处理有问题。还没发现解决方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP