aps.net用存储过程查询的疑惑!!

一直很疑惑 2012-10-30 10:36:18
页面查询的时候出现了个让我疑惑的事情,比如查询条件很多,比如查询的时候 有按照号码查询,有按照名称查询,有按照时间查询,这样存储过程要怎么传参数?

小弟想了两中:
第一种直接把where后面查询条件全部做为参数,在存储过程里定@StrWhere,然后写 :
‘select * from table1 where ’+ @StrWhere
第二种就是定义好多参数,@num,@name,@datetime,然后在写成 :
'select * from table1 where num= ' + @num + ' and name = '+ @name + ' and datetime = '+ @datetim


这两种哪种是正确的呢?或者有别的方式?
...全文
142 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
一直很疑惑 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
第二种,不然你的数据没有办法通过sqlparamater来防止sql注入,保持每个数据的类型合法性。
虽然多参数写起来麻烦些,但是也是有目的的
[/Quote]那是不是在存储过程里写好多判断哦?
  • 打赏
  • 举报
回复
第二种,不然你的数据没有办法通过sqlparamater来防止sql注入,保持每个数据的类型合法性。
虽然多参数写起来麻烦些,但是也是有目的的
misswangjinfeng 2012-10-30
  • 打赏
  • 举报
回复
第一种好些
一直很疑惑 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
那个都可以 ,

如果你想用 动态 SQL 就要用 sys.sp_execute........ 来执行。

如果你 固定 参数 那你就直接

select * from where name =@name 就完事了


但是 变量 一定是 定义过的。
[/Quote]
再问一个新问题,如果我全部设置成参数,包括字段,表,如:
定义@strTable,@strWhat,@strWhere,@strOrder,然后写一个通用的存储过程:
' select '+ @strWhat + ' from ' + @strTable + ' where ' + @strWhere + 'Order by' + @strOrder
这样写是不是太灵活了,但是从存储过程性能上是不是会下降,因为存储过程都是预编译的,直接来执行,现在都传成参数,就不能进行预编译,会不会变慢啊?这个地方不是很懂..
XBodhi. 2012-10-30
  • 打赏
  • 举报
回复
而且 SQL 里的 ' 在字符串中 要 写 成 ''
XBodhi. 2012-10-30
  • 打赏
  • 举报
回复
那个都可以 ,

如果你想用 动态 SQL 就要用 sys.sp_execute........ 来执行。

如果你 固定 参数 那你就直接

select * from where name =@name 就完事了


但是 变量 一定是 定义过的。
心灵彩虹 2012-10-30
  • 打赏
  • 举报
回复
定义
declare @t table(name char(10))
赋值
insert into @t(name) values( 'n1 ')
显示
select * from @t
昵称不合法 2012-10-30
  • 打赏
  • 举报
回复
第一种拼接字符串好些吧。。
不然要是只按号码和名称,不按时间查询,怎么传参数。。
  • 打赏
  • 举报
回复
写进@StrWhere的灵活些吧

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧