如何使用正确的字符集从sqlite数据库中插入和检索数据
本文关键字:数据库 插入 数据 检索 sqlite 何使用 字符集 | 更新日期: 2023-09-27 18:21:28
我正在用C#编写一个使用sqlite数据库的程序(通过ADO、System.Data.sqlite)。
问题是,当我从我的c#应用程序中插入包含瑞典语或德语字符(åäüÅÖÜ等)的字符串时,它们被错误地存储在数据库中。(看起来像是ɶ和Éect),但如果我使用SQLite Administrator将它们直接插入到数据库中,它们就会正确保存。
此外,当我试图用正确存储的C#应用程序检索数据时,它也会以同样的方式出错。。。
我做错了什么?
保存数据的代码:
SQLiteConnection cnn = new SQLiteConnection("Data Source=C:'temp'database.s3db");
cnn.Open();
SQLiteCommand mycommand = new SQLiteCommand(cnn);
mycommand.CommandText = "INSERT INTO images (image_name, tags, relevance) VALUES ('"Example Image åäö.jpg'", '"test'", 3)";
mycommand.ExecuteNonQuery();
cnn.Close();
cnn.Dispose();
试试这个:
private IDbDataParameter AddParameter(IDbCommand command, string paramName, DbType type, object value)
{
IDbDataParameter parameter = command.CreateParameter();
parameter.ParameterName = paramName;
parameter.DbType = type;
if (value != null)
parameter.Value = value;
else
parameter.Value = DBNull.Value;
command.Parameters.Add(parameter);
return parameter;
}
mycommand.CommandText = "INSERT INTO images (image_name, tags, relevance) VALUES (@image_name, @tags, @relevance)";
AddParameter(mycommand, "@image_name", DbType.String, "Example Image åäö.jpg");
AddParameter(mycommand, "@tags", DbType.String, "Test");
AddParameter(mycommand, "@relevance", DbType.Int32, 3);
mycommand.ExecuteNonQuery();
不要使用DbType.AnsiString,否则您将遇到与现在相同的问题。