SQLite ADO .NET - как правильно использовать построитель запросов? - PullRequest
0 голосов
/ 03 декабря 2009

Отлично работает следующий код:

  var oDb = new SQLiteConnection();
  oDb.ConnectionString = String.Format(
      "Data Source={0};"
    + "Synchronous=Full;",
    "test.db" );
  oDb.Open();
  SQLiteCommand oCmd = new SQLiteCommand( oDb );
  oCmd.CommandText =  "create table tests ( ";
  oCmd.CommandText += "  id guid primary key not null";
  oCmd.CommandText += ", name text default 'none' )";
  oCmd.ExecuteNonQuery();

Но если я попытаюсь использовать построитель запросов (для автоматического экранирования строк):

  var oDb = new SQLiteConnection();
  oDb.ConnectionString = String.Format(
      "Data Source={0};"
    + "Synchronous=Full;",
    "test.db" );
  oDb.Open();
  SQLiteCommand oCmd = new SQLiteCommand( oDb );
  oCmd.CommandText =  "create table tests ( ";
  oCmd.CommandText += "  id guid primary key not null";
  oCmd.CommandText += ", name text default @param )";
  var oParam = new SQLiteParameter( "@param", "none" );
  oCmd.Parameters.Add( oParam );
  oCmd.ExecuteNonQuery();

Исключение повышено:

SQLite error
near "@param": syntax error

Может кто-нибудь, пожалуйста, сэкономить немного знаний и подсказать мне, что я делаю не так?

1 Ответ

2 голосов
/ 03 декабря 2009

Хотя я не проверял I, это должно работать: oCmd.Parameters.AddWithValue("@param", "none"); Редактировать: это работает, если вы добавите () вокруг @param:

Edit2: Хорошо, ExecuteNonQuery () работает, но результат не является ожидаемым . @param не заменяется острым параметром. Не используйте этот код! (теперь сообщество вики. может кто-нибудь сможет это исправить?)

SQLiteCommand oCmd = new SQLiteCommand( oDb ); 
oCmd.CommandText =  "create table tests ( ";
oCmd.CommandText += "  id guid primary key not null";
oCmd.CommandText += ", name text default (@param) )";
var oParam = new SQLiteParameter("@param", "none");
oCmd.Parameters.Add(oParam);
oCmd.ExecuteNonQuery();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...