--创建存储过程SearchAA,需要传递三个参数:@iID--整形的ID(大于与等于0为有效值,小于0将不参与条件构造);@sName--字符串类型的Name(为空将不参与条件构造);@iAge--整形的Age(大于0为有效值,小于等于0将不参与条件构造)
create procedure SearchAA
@iID int,
@sName varchar(20),
@iAge int
as
declare @sSQL varchar(1000)
set @sSQL = ''
if @iID >=0
set @sSQL = ' id = ' + cast(@iID as varchar(10))--将参数@iID转换为字符串
if @sName <>''
if @sSQL = ""
set @sSQL = ' name = ''' + @sName + ''''
else
set @sSQL = @sSQL + ' and name = ''' + @sName + ''''
if @iAge >0
if @sSQL = ""
set @sSQL = ' age = ' + cast(@iAge as varchar(10))--将参数@iAge转换为字符串
else
set @sSQL = @sSQL + ' and age = ' + cast(@iAge as varchar(10))
--构造查询语句
if @sSQL <>''
set @sSQL = 'select * from aa where ' + @sSQL
else
set @sSQL = 'select * from aa '
--执行查询
exec(sSQL)
go
--调用存储过程:exec Search 1,'',0 执行该语句将从aa中查询出id = 1 的记录,其他两个条件不参与查询条件;exec Search -1,'张三',20 查询出Name为张三,Age为20的记录
你需要了解sql语句的拼接和一般字符串的拼接的异同.例如:在sql脚本语句中,字符串用单引号'',这些在C#语句中拼接"sql语句"字符串时需要注意.
你可以在vs.net中写一个用字符串拼接的sql语句,最后把它赋值给一个字符串对象.然后用断点调试区查看生成的sql语句的结果,一般sql语句较长,验证的方式都是把这段sql语句copy到sql sever的脚本文件(.sql)中去执行一下,就知道是否正确了.当然也有先在sql server 中调试好拼接字符串后再copy到程序代码中去修改的.具体方式不定.
(以上是介绍的拼接sql语句方法,不过这种方式的安全性不高,常见的sql注入式攻击就是利用的拼接sql语句的缺陷.)
你还可以考虑使用带参数的存储过程来实现,这个就需要了解存储过程的一些知识了,具体的方法我就不介绍了,关于带参数的存储过程,网上有很多例子参考.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)