现有如下代码
SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=;database=Temp");
SqlCommand cmd = new SqlCommand("select * from Userinfo where Username <> 'a''aa' and UserId <> @UserId");
SqlParameter parm = new SqlParameter();
parm.ParameterName = "@UserId";
parm.Value = 1;
cmd.Parameters.Add(parm);
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();在SQL事件探查器中发现SQL语句被转换为
exec sp_executesql N'select * from Userinfo where Username <> ''a''''aa'' and UserId <> @UserId', N'@UserId int', @UserId = 1
也就是Sql语句中的一个单引号变为两个单引号,如果在Sql语句中没有@UserId,也就是这样写
"select * from Userinfo where Username <> 'a''aa' and UserId <> 1" 则不会进行转换,这是怎么回事?在MSDN中也找不到相关资料我现在需要在SQL语句中即有内嵌条件也有用SqlParameter 赋值的参数,怎样才能不让它转换单引号?多谢!急
SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=;database=Temp");
SqlCommand cmd = new SqlCommand("select * from Userinfo where Username <> 'a''aa' and UserId <> @UserId");
SqlParameter parm = new SqlParameter();
parm.ParameterName = "@UserId";
parm.Value = 1;
cmd.Parameters.Add(parm);
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();在SQL事件探查器中发现SQL语句被转换为
exec sp_executesql N'select * from Userinfo where Username <> ''a''''aa'' and UserId <> @UserId', N'@UserId int', @UserId = 1
也就是Sql语句中的一个单引号变为两个单引号,如果在Sql语句中没有@UserId,也就是这样写
"select * from Userinfo where Username <> 'a''aa' and UserId <> 1" 则不会进行转换,这是怎么回事?在MSDN中也找不到相关资料我现在需要在SQL语句中即有内嵌条件也有用SqlParameter 赋值的参数,怎样才能不让它转换单引号?多谢!急
解决方案 »
- winfrom发邮件
- .net如何实现点击按钮刷新页面效果的后台代码啊!
- c#操作access插入失败..急.
- 怎样判断一个Http(rtsp/mms)连接是否有效,谢谢!
- 怎么把值从后台在iframe中显示出来(包含图片)
- SharePoint Server2007开发宝典下载
- 1
- gridview中实现相同项目名合并
- 请问怎么用户在选择了客户的图片文件后怎么显示在页面上即上传前的预览
- 高手急救:装完msdn2003,打开以后发现导航栏中“目录”和“索引”都没有,而且。。。。。
- 类似于网上的书店主页上...把书的图片从数据库动态的显示在主页面上?助我解决.100分相送
- 新手,想知道怎么用.NET建一个工程
exec sp_executesql N'select * from Userinfo where Username <> ''a''''aa'' and UserId <> @UserId', N'@UserId int', @UserId = 1'a''aa'如果不转换单引号,岂不是错了?
SqlParameter parm = new SqlParameter();
parm.ParameterName = "@UserName";
parm.Value = "a'aa";
cmd.Parameters.Add(parm);
parm = new SqlParameter();
parm.ParameterName = "@UserId";
parm.Value = 1;
cmd.Parameters.Add(parm);
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
exec sp_executesql N'select * from Userinfo where Username <> ''a''''aa'' and UserId <> @UserId', N'@UserId int', @UserId = 1
就是将作为一个字符串传给sp_executesql,实际传过去的参数就是:
select * from Userinfo where Username <> 'a''aa' and UserId <> @UserId
这个字符串
把这个查询变成一个字符串参数传递的时候要把单引号换成双引号,不换就错了没有@UserId的时候就不需要sp_executesql这个存储过程了,直接执行一个Sql语句即可,所以不用转换成''