Bue*_*KoW 1 .net c# sql sql-server ado.net
什么是最好的方法?我有一个C#.NET Web Forms网站,它根据一个或多个标签收集用户配置文件列表.该站点连接到SQL数据库,并使用存储过程进行大多数数据检索.
我的第一个(半延迟)思想是建立一个参数列表:tag1,tag2,tagN.将该列表传递给SP.在SP中,通过循环参数来构建WHERE子句.
在我甚至可以执行WHERE循环之前,如何在SQL中构建我的参数?
如果我可以通过SP一个数组或列表然后分开并构建我的查询,那将是很好的.但是,我不知道该怎么做 - 如果我这样做,我怀疑效率是否可取.
我可以使用CommandType.Text并在代码中吐出一个巨大的查询.这听起来也不是很有效.我想保持SQL/C#内容尽可能分开.这个网站已经是一团糟......
你们有没有想过这个?
表值参数在这里是理想的解决方案(假设您使用的是SQL Server 2008).它们允许您向SQL Server发送数据集(在2008年及以上),然后将这些数据作为存储过程中的集合处理(这意味着您实际上可以在集合上进行连接,EXISTS也许可以使用等).
如果您不在SQL Server 2008上,则有两个选项,第一个是构造XML文档,然后使用SQL Server的XML支持(2005及更高版本)将输入的文档(通过字符串或XML参数)解析为数据设置你可以执行你的连接/过滤器.
或者,您也可以发送一个自定义格式,您可以使用SQL CLR方法进行处理(任何类型的过程代码,如解析通常在SQL CLR方法中更高效; SQL Server更适合基于集合的操作).
最后,由于您是在代码中动态生成此查询,因此您不必将集合作为参数传递,您始终可以使用参数.但是,不用说你不应该只是调用ToString然后附加参数; 您应该创建一个有效的参数名称(不难做)将其附加到IN子句中引用的集合,然后使用适当的值向命令添加参数.这假设您的IN子句引用的值的数量不超过命令中允许的参数数量.
| 归档时间: |
|
| 查看次数: |
1286 次 |
| 最近记录: |