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