Получить строковые данные, хранящиеся в целочисленном поле из базы данных sqlite 3, используя C # - PullRequest
3 голосов
/ 14 февраля 2012

У меня есть база данных sqlite3 с несколькими таблицами.Одно из них имеет два поля: s_id и user_id, первое - целочисленное, второе - целочисленный первичный ключ.Я могу наблюдать за содержимым таблицы с помощью SQLite Data Browser, и в таблице есть две строки.

значения user_id равны 1 и 2.

значения s_id являются, однако, строками (например, «user1» и «user2»), и в браузере данных sqlite эти строки отображаются.

Я пытаюсь получить информацию, используя System.Data.SQLite и следующий код на C #:

using (SQLiteConnection connection = new SQLiteConnection(string.Format(@"Data Source={0};Legacy Format=True;", path)))
{
  connection.Open();
  using (SQLiteCommand command = new SQLiteCommand("SELECT * FROM users", connection))
  {
    using (SQLiteDataReader reader = command.ExecuteReader())
    {
      while (reader.Read())
      {
       string user = reader["s_id"].ToString();
      }
    }
  }
}

Я искал в Интернете и обнаружил, что sqlite может хранить строковые данные в полях int.Но я не могу прочитать эти строки с помощью C #.Результат всегда "0".Даже если я разверну читателя в Watch, пока не смогу видеть объекты, значение там тоже равно 0.(Второй объект, соответствующий user_id, имеет значение, как и положено, 1 или 2).

Знаете ли вы, как можно получить это строковое значение в целочисленном поле в C #?

Спасибо.

1 Ответ

3 голосов
/ 14 февраля 2012

Перво-наперво: если вы собираетесь хранить TypeX в столбце базы данных, не объявляйте его как TypeY , просто потому, что вы можете. Хранение только значений соответствующего типа является (с точки зрения sqlite) необходимым условием независимости от технологии (как вы можете видеть).

Если по какой-то странной причине вы не можете изменить саму базу данных, вам следует привести значение в вашем запросе, например так:

SELECT CAST(s_id AS VARCHAR(255)) AS s_id FROM users;
...