我试图在SQLite中使用C#执行参数化查询,我使用的方法就是创建一个静态命令.
SQLiteCommand cmd = new SQLiteCommand(
"SELECT [ID]" +
",[email]" +
",[serializedata]" +
",[restrictions]" +
" FROM " + UserTable +
" WHERE @search = @searchparam", SQLConnection);
cmd.Parameters.Add(new SQLiteParameter("@searchparam"));
cmd.Parameters.Add(new SQLiteParameter("@search"));
Run Code Online (Sandbox Code Playgroud)
并称之为:
Command.Parameters["@searchparam"].Value = searchdata;
Command.Parameters["@search"].Value = search;
SQLiteDataAdapter slda = new SQLiteDataAdapter(UserSelectUsernameCommand);
DataSet ds = new DataSet();
slda.Fill(ds);
User[] array = new User[ds.Tables[0].Rows.Count];
int index = 0;
foreach (DataRow row in ds.Tables[0].Rows)
{
array[index] = new User(this, row);
index++;
}
return array;
Run Code Online (Sandbox Code Playgroud)
但我在"'@search'的行中得到一个错误不是一个正确的列名"或类似的东西.如果我使用一个常量列名,只使用它的工作参数数据,但我不想创建10个不同的命令,当我需要搜索不同的列名称.
这是什么问题?
Mar*_*ell 14
像列名(或表名),一般的事情不会进行参数设置-而事实上,有不同的指数意味着它将有是一个不同的计划内.所以,你将不得不使用拼接- 但要小心白名单已知的列名,以防止SQL注入:
SQLiteCommand cmd = new SQLiteCommand(@"
SELECT [ID],[email],[serializedata],[restrictions]
FROM " + whiteListedUserTable + @"
WHERE [" + whiteListedColumnName + @"] = @searchparam", SQLConnection);
cmd.Parameters.Add(new SQLiteParameter("@searchparam"));
...
Command.Parameters["@searchparam"].Value = searchdata;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10014 次 |
| 最近记录: |