我继承了与做DB以下的操作方式散落数百次相当大的C#代码库:干净的方法来重试失败System.Data.SqlClient的操作
using (SqlConnection connection = new SqlConnection(connectionString)) {
SqlCommand command = new SqlCommand(queryString, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
然而,由于外界因素我的控制,数据库服务器非常残酷,特别容易出现故障,所以这些查询中很大一部分失败。鉴于这种访问数据库的特殊方式遍布在代码中,我怎样才能在一个地方编码重试,并且在任何地方都可以使用SqlCommand
?
的几点思考:
- 我试图重写
SqlConnection
/SqlCommand
ExecuteNonQuery
这样我就可以创建一个包装版本。不好。SqlConnection
和SqlCommand
是密封的C#对象。 - 我可以创建一个名为
MySqlConnection
的容器类,其中包含一个.NETSqlConnection
对象,然后创建我自己的ExecuteNonQuery
,然后再重试SqlCommand.ExecuteNonQuery()
几次。然而,这是不好的,因为我将不得不实施每一个SqlCommand
函数并且训练其他人直接使用我的包装类而不是SqlCommand
。不幸的是,用户教育在这种情况下不是可接受的解决方案。我与其他被外包的开发人员卡住,经常有人离职,并且不会听我的请求使用新的SQL类。 - 正如我之前提到的,我只是无法访问(政治和技术上)使用数据库层。这个问题的根本原因只是一个糟糕的SQL服务器设置,但我无法解决这个级别的问题。
我还有其他的选择吗?
顺便说一句,你还需要在你的'SqlCommand'周围使用''。此外,FYI,'SqlClient'与C#无关 - 它是.NET的一部分。 – 2010-10-06 21:22:36
实际上并不需要处理SqlCommand。它来自IDisposable的唯一原因是因为它来自Componant。 Dispose for Componant的功能是从其父站点中删除组件。所有这一切都是为了*将n下的所有东西拖放到Form *人群(即VB类型)上。 – Tergiver 2010-10-06 23:04:50