当前位置:编程学习 > C#/ASP.NET >>

困扰的sql参数化查询

--------------------编程问答-------------------- 方法一:
不要使用参数。
string sql = string.Format("select count(*) from [UserInfo] where [UserName] like N'{0}'",this.txtUserName.Text) --------------------编程问答-------------------- 方法2:
在数据库中拼接字符串,然后使用exec(@sql)执行
--------------------编程问答-------------------- 既然是参数化查询 为什么还用拼字符串的方式啊 大哥存储过程啊 --------------------编程问答--------------------
引用 2 楼 u011303459 的回复:
方法2:
在数据库中拼接字符串,然后使用exec(@sql)执行

感谢您的回答,我目前用的是第一种方法,但这种情况就抛弃参数了,我觉的您说得这种方法很好,不知道具体实现是怎么样的呢? --------------------编程问答--------------------
引用 3 楼 jiaoshiyao 的回复:
既然是参数化查询 为什么还用拼字符串的方式啊 大哥存储过程啊


不喜欢存储过程的方式,而且逻辑不复杂,我觉得没必要用存储过程 --------------------编程问答-------------------- cmd.Parameters.Add("@username", SqlDbType.NVarChar);已经指定参数类型为Unicode了
问题的重点应该是数据库字段的类型是否以N开头
如果存储了中文但又不是NVarChar类型,在使用中可能会出问题(当没有中文语言时字符会显示成?)
改字段类型吧 --------------------编程问答-------------------- 都一样吧 哪个好用用哪个 --------------------编程问答--------------------
引用 4 楼 huzhichenghigh 的回复:
Quote: 引用 2 楼 u011303459 的回复:

方法2:
在数据库中拼接字符串,然后使用exec(@sql)执行

感谢您的回答,我目前用的是第一种方法,但这种情况就抛弃参数了,我觉的您说得这种方法很好,不知道具体实现是怎么样的呢?

就是在存储过程中拼接字符串,然后使用exec执行这条语句
declare @sql varchar(100)
set @sql = 'select count(*) from [UserInfo] where [UserName] like N'''+@username+''''
exec(@sql) --------------------编程问答-------------------- 注意sql注入 --------------------编程问答-------------------- 在用模糊查询的时候可以这样。
cmd.Parameters.Add("@username", "%" + SqlDbType.NVarChar + "%");

根据经验的话,Sql语句这么写应该行的吧!
1、string sql = "select count(*) from [UserInfo] where [UserName] like N@username";
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,