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

时间:2012-01-25 14:44:09

标签: c# sqlite

我在C#编写一个使用sqlite数据库的程序(通过ADO,System.Data.SQLite)。

问题在于,当我从包含瑞典语或德语字符(åäöüÅÄÖÜ等)的c#app中插入字符串时,它们会错误地存储在数据库中。 (看起来像¶和é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();

1 个答案:

答案 0 :(得分:1)

试试这个:

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