zoukankan      html  css  js  c++  java
  • MySQLDriverCS 不支持问题解决 Uint 4.0 .net 2.0

    项目需要要有C#访问Mysql数据库,MySQL.Data.dll 这个库不知道什么原因,读以前的数据库时,字符类型是乱码。

    没办法只能用 MySQLDriverCS-n-EasyQueryTools-4.0.0-DotNet2.0

    中文参考手册http://www.yesky.com/imagesnew/software/mysql/manual_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,处理有问题。还没发现解决方法

    2011年3月1日

  • 相关阅读:
    node.js之Cookie
    jQuery和js之Cookie实现
    StringRedisTemplate操作Redis
    Could not get a resource from the pool 错误解决
    tableLayoutPanel 列宽度设置
    KRBTabControl(中文)Windows选项卡控件
    KRBTabControl
    Deferred content load was not performed. To provide the content, subscribe to the View's QueryControl event
    where(泛型类型约束)
    ExportAsFixedFormat Visio文件另存为其他几种格式的处理
  • 原文地址:https://www.cnblogs.com/j349900963/p/sin.html
Copyright © 2011-2022 走看看