【发布时间】:2013-06-24 15:01:46
【问题描述】:
我有一个到 SQL Server 数据库(版本 10.50.4000)的功能齐全(安全)的会话。这存储在一个公共变量中:
SqlConnection conn = new SqlConnection();
我只想运行SELECT 查询。对于其他任何事情,用户帐户都没有权限。
查询仅使用一个用户条目构建,该条目被插入到一个简单的文本框中。
很遗憾,我不能告诉你原来的命令文本。所以我为你简化了:
function print_users(string filtervalue)
{
SqlCommand cmd = null;
cmd = new SqlCommand("SELECT users From groups WHERE group_name LIKE '%@fv%'", this.conn)
cmd.Parameters.Add("@fv", SqlDbType.NVarChar);
cmd.Parameters["@fv"].Value=filtervalue;
rdr = cmd.ExecuteReader();
while(rdr.Read())
{
//Do something with the answer from the DB
}
}
但这并不能解决问题。我也试过AddWithValue,但没有运气。
在应该替换@fv 的行上创建停止点时,我可以逐行浏览代码。而且我可以看到应该替换@fv 的命令被正确处理,没有错误。但是@fv 没有被替换(或者至少我在调试控制台中看不到替换)。
我做错了什么?
编辑:
感谢您的回复。省略单引号 ( ' ) 就可以了。
而且我还了解到这不是字符串替换。谢谢。
一句话:连接不是一直打开的。当不再需要它时,它会立即关闭;并在需要时重新建立——我只是忘了把它写到我的示例代码中。
再次感谢您的帮助!
【问题讨论】:
-
字符串中的参数不会被替换。它们在 RPC 调用中作为 PARAMETERS 发送到服务器。如果您使用 SQL Server Profiler 开始跟踪,您会看到这一点
标签: sql-server parameters sqlcommand