以下是我的示例代码:
public static class MySqlHelper
{
private static string constring = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString;
public static int ExecuteNonQuery(string mysqlquery)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(mysqlquery, conn);
int result;
try
{
conn.Open();
result= cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
return result;
}
}
用法:MySqlHelper.ExecuteNonQuery("select * from customers");
我想知道使用此静态类的问题。
我可以像上面提到的here更改我的课程,但我已经在几个网站上使用这个课程,我需要几天时间在每个地方更改它并测试它。
感谢您的任何意见。
修改:更新了代码。这会对所提供的答案产生影响吗?对不起,我应该在开头发帖。
答案 0 :(得分:7)
我假设连接字符串在执行期间没有改变(你可能想让它只读)。由于问题中没有显示其他共享状态,因此没有实际问题。
但是,如果您有任何共享状态,则会出现巨大的线程问题。如果您共享连接,则会遇到更大的问题。
但正如所写,没有重要的静态字段:没问题。
答案 1 :(得分:4)
答案 2 :(得分:2)
静态类很难测试。
您的问题提到,要进行更改,您必须在几个网站上更改课程。如果您的网站耦合到一个界面,那么交换实现将相对简单。
在我自己的项目中,我避免使用公共静态类。他们很快就会变得笨拙。
答案 3 :(得分:1)
因此没有问题,这取决于你如何使用这个类,理想情况下它是抽象工厂模式的一部分,以便具有静态连接,以便可以在整个应用程序中使用相同的连接,但是使用诸如executereader和其他方法之类的方法不是好的选择。类似地总是在使用之前检查连接是否已关闭或其状态,因为如果您正在使用静态连接并且使用了executereader语法,那么它将关闭连接,如果其他方法在此之后使用了连接,那么它将获得错误
答案 4 :(得分:1)
明显的缺点是:
1)可以通过使用单例作为连接字符串名称
来解决2)在不引入共享数据的情况下无法在静态类中求解:即。没有在你的背后种植刀。
答案 5 :(得分:0)
您是否知道MySQL Connector for .NET现在有一个MySqlHelper类(您可以在源here中查看它)?
答案 6 :(得分:0)
如果您打算采用这种方式,您可以考虑使用Microsoft DAAB SqlHelper v2产品。它使用相同的概念,但更加健壮。它还缓存SqlParameters。该代码大约在2001年出现,并且一直被许多开发人员使用。