Как вставить и получить данные из базы данных sqlite с правильным набором символов? - PullRequest
1 голос
/ 25 января 2012

Я пишу программу на C #, использующую базу данных sqlite (через ADO, System.Data.SQLite).

Проблема в том, что когда я вставляю строки из моего приложения на c #, содержащие шведские или немецкие символы (åäöüÅÄÖÜ и т. Д.), Они неправильно сохраняются в БД. (выглядит как ö и ä ect), но если я вставлю их непосредственно в базу данных с помощью администратора SQLite, они будут сохранены правильно.

Кроме того, когда я пытаюсь получить данные с помощью моего приложения на 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 Ответ

1 голос
/ 04 февраля 2012

Попробуйте:

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, иначе у вас будут такие же проблемы, как и сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...