如何使用正确的字符集从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();

如何使用正确的字符集从sqlite数据库中插入和检索数据

试试这个:

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,否则您将遇到与现在相同的问题。