使用此静态类有哪些潜在问题

问题描述

| 这是我的示例代码
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