c # Вставьте логическое значение в базу данных - PullRequest
3 голосов
/ 29 октября 2011

У меня проблема с вставкой логического значения в базу данных.У меня есть простая структура:

struct
{
   string name;
   bool isStudent;
}

, и я хочу вставить ее в базу данных следующим образом:

 dbCommand.CommandText = "INSERT INTO People (name, isStudent) VALUES ('" + people1.name + "', " + people1.isStudent + ")";
 dbCommand.ExecuteNonQuery();

, но я выкидываю исключение:

SQLiteошибка нет такого столбца: True

Ответы [ 3 ]

4 голосов
/ 29 октября 2011

Используйте параметры, и вам не придется беспокоиться о кавычках или формате значений (кроме того, рекомендуется избегать SQL-инъекций ):

dbCommand.CommandText = "INSERT INTO People (name, isStudent) 
                         VALUES (@name, @isStudent)";
dbCommand.Parameters.AddWithValue("@name", people1.name);
dbCommand.Parameters.AddWithValue("@isStudent", people1.isStudent);
dbCommand.ExecuteNonQuery();
3 голосов
/ 29 октября 2011

Попробуйте использовать:

dbCommand.CommandText = "INSERT INTO People (name, isStudent) VALUES ('" + people1.name + "', '" + people1.isStudent + "')";

Обратите внимание, что 'true' или 'false' будут указаны таким образом.

Или:

int val = isStudent ? 1 : 0;
dbCommand.CommandText = "INSERT INTO People (name, isStudent) VALUES ('" + people1.name + "', " + val + ")";

1 будет использоваться для истинных значений и 0 для ложных значений.

1 голос
/ 29 октября 2011

SQLite не имеет типа столбца bool, и вы сами создаете оператор SQL.Если вы хотите это сделать, то конвертируйте 1 и 0 туда и обратно.

Я бы также подумал, что оболочка .net сделает это за 4 u.Но вам придется использовать параметры SQL, а не создавать строку самостоятельно, чтобы даже дать ей возможность сделать это.

Построение параметризованных запросов (?) Также позволяет SQL lite кэшировать скомпилированные операторы.

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