一般来说,我遵循这个程序(设计例子):
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)这个页面:
解决方法
原文地址:https://www.jb51.cc/csharp/94947.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。