如何使用 DbDataAdapters 处理长时间运行的 Web 服务中的 ADO.NET DbConnection?
基本上我现在做的是:
在初始化期间
- 创建连接并将其存储
- 创建 DbDataAdapters 及其命令,并使用存储的连接
- 调用 DbDataAdapter.Fill 为每个 适配器从数据库填充 DataTables
,并在处理请求时
- 在 DataTables 中插入/更新/删除行,
- 并在某个时刻调用 DbDataAdapter.Update。不一定每次(更新自然使用适配器的命令连接)
这是正确的方法还是我应该在请求到达时始终创建一个新连接,然后在调用 DbDataAdapter.Update 之前将其分配给 DbDataAdapter.Insert/Update/DeleteCommand.Connection ?我正在考虑网络/服务器问题后重新连接到数据库等问题。
谢谢& BR-马蒂
Basically what I do now is:
During initialization
- create connection and store it
- create DbDataAdapters and their commands with the stored connection
- call DbDataAdapter.Fill for each
adapter to populate DataTables from database
and when handling requests
- insert/update/delete rows in DataTables
- call DbDataAdapter.Update at some point. Not necessarily every time (update uses naturally adapter's commands' connection)
Is this the correct way or should I always create a new connection when request arrives, and then assign it to DbDataAdapter.Insert/Update/DeleteCommand.Connection, before calling DbDataAdapter.Update? I'm thinking about issues like reconnecting to db after network/server problem.
Thanks & BR -Matti
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为您提到了 Web 服务,所以请考虑一下并发性。如果在服务器端处理两个或多个并发请求怎么办?
使用相同的连接可以吗?使用相同的
DataAdapter
可以吗?最可能的答案是——不是,它可能行不通。
因此,最安全的方法是根据每个请求创建一个新的连接和一个新的数据适配器。
由于连接是池化的,因此“重新连接”应该不会有问题 - 池提供连接并且握手可能之前已执行过。这样就不会影响性能。
Because you mention web services, think about concurrency. What if two or more concurrent requests are processed at your server side.
Is it ok to use the same connection? Is it ok to use the same
DataAdapter
?The most probable answer is - it's not, it probably would not work.
Thus, the safest approach is to create a new connection and a new data adapter upon each request.
Since connections are pooled, there should be no issues with "reconnecting" - the pool serves a connection and the handshake was probably performed before. There's then no performance hit.