- 論壇徽章:
- 0
|
轉(zhuǎn):_Sin
項(xiàng)目需要要有C#訪問Mysql數(shù)據(jù)庫,MySQL.Data.dll 這個庫不知道什么原因,讀以前的數(shù)據(jù)庫時,字符類型是亂碼。
沒辦法只能用 MySQLDriverCS-n-EasyQueryTools-4.0.0-DotNet2.0
中文參考手冊http://www.yesky.com/imagesnew/s ... nual_Reference.html
安裝用了后發(fā)現(xiàn)問題,不支持Uint,當(dāng)數(shù)據(jù)庫中值在4294967295/2~4294967295就會報(bào)錯。
項(xiàng)目不是很急,查源碼。
發(fā)現(xiàn)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" ;
}
統(tǒng)一返回的Int32,需要添加一個分支
發(fā)現(xiàn)沒得標(biāo)識說明,查資料后發(fā)現(xiàn)Flags可以用,于是修改C#源碼的類結(jié)構(gòu)- /// <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;}
- }
復(fù)制代碼 實(shí)現(xiàn)了功能,麻煩二:一,非托管到托管的處理,不清楚內(nèi)存結(jié)構(gòu)。二,C寫的結(jié)構(gòu)不清楚查了很才查得Enmu值。
一共修改的兩上上傳記錄一下,
最后又發(fā)現(xiàn)一個問題,MySQL中的VARBINARY被轉(zhuǎn)換在string,處理有問題。還沒發(fā)現(xiàn)解決方法 |
|