问题描述
|
这是我的示例代码:
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\");
我想知道使用此静态类的问题。
我可以按此处所述更改班级,但是我已经在几个网站上使用过该班级,因此我需要几天时间才能在每个地方进行更改并进行测试。
感谢您的任何投入。
编辑:更新了代码。这对提供的答案有影响吗?抱歉,我应该在一开始就发布。
解决方法
我假设连接字符串在执行期间不会改变(您可能希望将其设置为只读)。由于问题中没有显示其他共享状态,因此没有实际问题。
但是,如果您有任何共享状态,那么您将面临巨大的线程问题。如果您拥有共享的连接,那么您将面临更大的问题。
但是按照书面规定,没有明显的静态字段:没有问题。
, 我以为他的回答很清楚。
在ASP.NET中编写自己的提供程序类
\“请记住,连接将在所有用户的同一实例处共享,这可能会导致严重问题... \”
, 静态类很难测试。
您的问题提到要进行更改,您必须在几个网站上更改课程。如果您的网站与某个界面耦合,那么换掉实现将相对简单。
在我自己的项目中,我避免使用公共静态类。他们会很快变得笨拙。
, 因此,这完全取决于您如何使用此类,理想情况下,它是抽象工厂模式的一部分以具有静态连接,以便可以在整个应用程序中使用相同的连接,但是拥有诸如executereader和其他方法之类的方法不是一个好选择。同样,在使用连接之前,请始终检查连接是否尚未关闭或其状态,因为如果您使用的是静态连接,并且已在executereader中使用了语法,则它将关闭连接;如果在此之后使用了其他方法,则它将获得连接。错误
, 明显的缺点是:
硬编码的连接字符串
没有驱动程序中的连接池,这是非常糟糕的:// open conn + // close conn
1)可以通过使用单例作为连接字符串名称来解决
2)不能在静态类中解决而不引入共享数据:不用在后面植刀
, 您是否知道用于.NET的MySQL连接器现在具有MySqlHelper类(您可以在此处的源代码中进行检查)?
, 如果要采用这种方法,许多人都想考虑使用Microsoft DAAB SqlHelper v2产品。它使用相同的概念,但功能更强大。它还缓存SqlParameters。该代码大约在2001年发布,并已被许多开发人员不断使用。
http://www.microsoft.com/download/zh-CN/details.aspx?id=435