以下代码完美无缺:
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
任何人都可以请一点知识并暗示我的错误吗?
答案 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();