一、建立数据库时的设置
static string GetConnectionString()
{FbConnectionStringBuilder FbCSB = new FbConnectionStringBuilder();
FbCSB.Database = DatabasePath + @"\" + myDatabaseName;//
//FbCSB.Database =csb.Database.Replace((char)92,(char)47);
FbCSB.UserID = myUserID;
FbCSB.Password = myPassword;
//FbCSB.Charset = "UTF8"; //不设置任何的字符集,就可以避免出现中文路径不识别问题了
FbCSB.Charset = "GBK”;FbCSB.ServerType = FbServerType.Embedded; // 设置数据库类型为嵌入式
return FbCSB.ToString();
}多次设置FbCSB.Charset = "GBK”;这项不行,有一次居然可以了,是复制了7个文件到执行文件目录:
//fbembed.dll
//firebird.conf
//firebird.msg
//ib_util.dll
//icudt30.dll
//icuin30.dll
//icuuc30.dll
二、在建表时要注意
const string STR_SQL_CreateTabledddd = "CREATE TABLE \"用户\"("
+ "ID integer ,"
+ "\"姓名\" VARCHAR(20) ,"//一定要写成\"姓名\" VARCHAR(20)
+ "\"县市\" VARCHAR(20) ,"//这里不用加character set gb_2312
+ "\"学校\" VARCHAR(20) ,"
+ "\"语文\" NUMERIC ,"
+ "\"数学\" NUMERIC )";
cmd.CommandText = STR_SQL_CreateTabledddd;
cmd.ExecuteNonQuery();其中\"是转义符,就是在中文字符串上加双引号。
三、在插入记录时注意
public static void NewRecord(string tableName, int id, string name)
{
FbCommand insertData = new FbCommand("", conn); //插入数据,
insertData.CommandText = "insert into \"" + tableName + "\" values (@id, @name,@Xiang_Shi,@Xue_Xiao,@Yu_Weng,@Shu_Xue)";
insertData.Parameters.Clear();
insertData.Parameters.Add("@id", FbDbType.Integer).Value = id;
insertData.Parameters.Add("@name", FbDbType.VarChar, 20).Value = name;//这里不用写成"\"" + name + "\""
insertData.Parameters.Add("@Xiang_Shi", FbDbType.VarChar, 20).Value = "北京市";//这里不用写成"\"" + 喀什市 + "\""
insertData.Parameters.Add("@Xue_Xiao", FbDbType.VarChar, 20).Value = "顺义县";
insertData.Parameters.Add("@Yu_Weng", FbDbType.Numeric).Value = 85;
insertData.Parameters.Add("@Shu_Xue", FbDbType.Numeric).Value = 88;
insertData.ExecuteNonQuery();
}在插入记录时使用Parameters.Add来添加参数,在中文字符串参数上不要加双引号。在查询语句中的中文表名要加双引号。
但是,在查询出数据时,dataGridView正常显示了中文(表数据),listBox中却显示为乱码(表名)。