SQLite ADO .NET - 如何正确使用查询构建器?

时间:2009-12-03 20:15:32

标签: sqlite

以下代码完美无缺:

  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 个答案:

答案 0 :(得分:2)

虽然我没有测试过我,但这应该有效: oCmd.Parameters.AddWithValue("@param", "none"); 修改:如果你在@param周围添加(),它就可以了。

Edit2:嗯,ExecuteNonQuery()确实有效,但结果不是预期的结果。 @param不会被acutal 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();