Sqlite3内部采用UTF8存储,但是为转成GB2312就必须调用编码函数,太麻烦了,于是今天琢磨出一种让sqlite3内部存储汉字采用 GB2312的方法,将字段设为BLOB,然后保存汉字的GB2312编码的字节数组就OK了。但是把词库的所有字段从TEXT转换成BLOB,结果查询 时用where word = ’hello’竟然无法查询出结果,随手改成where word like ’hello’竟然可以,估计是BLOB无法用"="查询。


InBlock.gif# using System;    
InBlock.gif# using System.Text;    
InBlock.gif# using System.Data;    
InBlock.gif# using Finisar.SQLite;    
InBlock.gif#    
InBlock.gif# namespace SqliteConvert    
InBlock.gif# {    
InBlock.gif#         /// <summary>    
InBlock.gif#         /// Class1 的摘要说明。    
InBlock.gif#         /// </summary>    
InBlock.gif#         class Class1    
InBlock.gif#         {    
InBlock.gif#                 /// <summary>    
InBlock.gif#                 /// 应用程序的主入口点。    
InBlock.gif#                 /// </summary>    
InBlock.gif#                 [STAThread]    
InBlock.gif#                 static void Main( string[] args)    
InBlock.gif#                 {    
InBlock.gif#                         //    
InBlock.gif#                         // TODO: 在此处添加代码以启动应用程序    
InBlock.gif#                         //    
InBlock.gif#    
InBlock.gif#                            
InBlock.gif#                         //打开以前的库    
InBlock.gif#                         SQLiteConnection sqliteConn = new SQLiteConnection( @"Data Source=d:projectDrEye.db;New=False;Compress=True;Version=3;");    
InBlock.gif#                         sqliteConn.Open();    
InBlock.gif#                         SQLiteDataAdapter sqliteDa = new SQLiteDataAdapter( "select * from DrEye",sqliteConn);    
InBlock.gif#                         DataSet sqliteDs = new DataSet();    
InBlock.gif#                         sqliteDa.Fill(sqliteDs);    
InBlock.gif#    
InBlock.gif#    
InBlock.gif#                         //创建新库    
InBlock.gif#                         SQLiteConnection sqliteConnNew = new SQLiteConnection( @"Data Source=d:projectDrEye.new1.db;New=True;Compress=True;Version=3");    
InBlock.gif#                         sqliteConnNew.Open();    
InBlock.gif#                            
InBlock.gif#                         //建表    
InBlock.gif#                         SQLiteCommand sqliteCmdNew = sqliteConnNew.CreateCommand();    
InBlock.gif#                         sqliteCmdNew.CommandText = "CREATE table DrEye (word TEXT Primary Key,explanation BLOB,InflectedForm BLOB)";    
InBlock.gif#                         sqliteCmdNew.ExecuteNonQuery();    
InBlock.gif#    
InBlock.gif#                         //插入数据    
InBlock.gif#                         SQLiteDataAdapter sqliteDaNew = new SQLiteDataAdapter( "select * from DrEye", sqliteConnNew);    
InBlock.gif#                         SQLiteCommandBuilder sqliteCbNew = new SQLiteCommandBuilder(sqliteDaNew);    
InBlock.gif#                            
InBlock.gif#                         DataSet sqliteDsNew = new DataSet();    
InBlock.gif#                         sqliteDaNew.Fill(sqliteDsNew);    
InBlock.gif#    
InBlock.gif#                         Console.WriteLine(sqliteDs.Tables[0].Rows.Count);    
InBlock.gif#                         Console.WriteLine(sqliteDsNew.Tables[0].Rows.Count);    
InBlock.gif#                                                    
InBlock.gif#                         foreach(DataRow dr in sqliteDs.Tables[0].Rows)    
InBlock.gif#                         {    
InBlock.gif#                            
InBlock.gif#                                    
InBlock.gif#                                 DataRow sqliteDrNew = sqliteDsNew.Tables[0].NewRow();    
InBlock.gif#                                 sqliteDrNew[0] = dr[0];    
InBlock.gif#                                 sqliteDrNew[1] = EncodingConvert(dr[1].ToString());    
InBlock.gif#                                 if (dr[2].ToString() != "")    
InBlock.gif#                                 {    
InBlock.gif#                                         sqliteDrNew[2] = EncodingConvert(dr[2].ToString());    
InBlock.gif#                                 }    
InBlock.gif#                                 sqliteDsNew.Tables[0].Rows.Add(sqliteDrNew);    
InBlock.gif#                                 break;    
InBlock.gif#                         }    
InBlock.gif#                         sqliteDaNew.Update(sqliteDsNew);    
InBlock.gif#    
InBlock.gif#    
InBlock.gif#                         Console.WriteLine( "Game over!");    
InBlock.gif#                         Console.ReadLine();    
InBlock.gif#                 }    
InBlock.gif#    
InBlock.gif#                 //将字符串转换成字节    
InBlock.gif#                 static byte[] EncodingConvert( string utf8String)    
InBlock.gif#                 {    
InBlock.gif#                                            
InBlock.gif#                         byte[] ansiCode;    
InBlock.gif#                         ansiCode = Encoding.Default.GetBytes(utf8String);    
InBlock.gif#                         return ansiCode;    
InBlock.gif#                 }    
InBlock.gif#         }    
InBlock.gif# }