加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何正确有效地重用C#.NET(SQL Server)中的准备语句?

发布时间:2020-12-15 06:42:18 所属栏目:百科 来源:网络整理
导读:我看了很多问题,但显然我的SO-fu不能完成任务,所以我在这里.我正在努力有效地使用准备好的语句,我不仅仅意味着参数化一个语句,而是编译一个用于重用很多次.我的问题在于参数和重用以及如何正确实现. 一般来说,我遵循这个程序(设计例子): SqlConnection db =
我看了很多问题,但显然我的SO-fu不能完成任务,所以我在这里.我正在努力有效地使用准备好的语句,我不仅仅意味着参数化一个语句,而是编译一个用于重用很多次.我的问题在于参数和重用以及如何正确实现.

一般来说,我遵循这个程序(设计例子):

SqlConnection db = new SqlConnection(...);
SqlCommand s = new SqlCommand("select * from foo where a=@a",db);
s.Parameters.Add("@a",SqlDbType.VarChar,8);
s.Prepare();
...
s.Parameters["@a"] = "bozo";
s.Execute();

超级,这个工作.但是,每次运行此查询时,我都不想执行所有这些步骤(或后四个).这似乎正在抵制准备声明的整个想法.在我看来,我只需要改变参数并重新执行,但问题是如何做到这一点?

我尝试过s.Parameters.Clear(),但这实际上是删除参数本身,而不仅仅是值,所以我基本上需要重新添加参数并重新准备,这似乎也打破了整个点.不用了,谢谢.

在这一点上,我将遍历s.Parameters并将它们全部设置为null或其他一些值.它是否正确?不幸的是,在我目前的项目中,我查询了?15个参数,每次运行需要执行?10,000次.我可以将这个迭代分解成一个方法,但是想知道是否有更好的方法来执行此操作(没有存储过程).

我当前的解决方法是一个扩展方法SqlParameterCollection.Nullify,它将所有参数设置为null,这对我的情况是好的.执行后我就运行这个.

我发现一些几乎完全相同的(IMHO)未回答的问题:

Prepared statements and the built-in connection pool in .NET

SQLite/C# Connection Pooling and Prepared Statement Confusion(塞尔格非常接近回答!)

我可以找到的最好的答案是(1)上面的常识和(2)这个页面:

http://msdn.microsoft.com/en-us/magazine/cc163799.aspx

解决方法

当重新使用准备好的SqlCommand时,您需要做的就是将参数值设置为新的值使用后您不需要清除它们.

对于我自己,我没有看到在过去十年中生产的DBMS,它从准备一个语句中获得了任何明显的好处(我想如果DB Server处于CPU的极限,但这不是典型的).你确定准备是必要的吗?

运行相同的命令“?每次运行10000次”对我来说有点儿气味,除非你从外部来源上传.在这种情况下,批量装载可能有帮助?每个人都在做什么?

干杯 –

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读