.net 在访问静态属性时,尚未初始化ConnectionString属性

blmhpbnm  于 2023-10-21  发布在  .NET
关注(0)|答案(1)|浏览(152)

我在一个模型中有以下代码,我已经与所有数据库相关的活动一起工作,所以每次我想与数据库一起工作时,我都不会编写冗余的代码,这个模型类看起来像这样:
Shared.cs

private static string ConStr
    {
        get
        {
            Shared shrObj = new Shared();
            return shrObj.DecryptString(ConfigurationManager.ConnectionStrings["constr"].ConnectionString);
        }

    }

    public static SqlConnection SqlCon = new SqlConnection(ConStr);

    public static SqlDataReader ORC(SqlCommand sqlCom)
    {
        SqlDataReader sqlReader=null;
        
        try
        {
            SqlCon.Open();//ERROR HERE 
            //The ConnectionString property has not been initialized.
            sqlReader = sqlCom.ExecuteReader();

        }
        catch (Exception ex)
        {
            WriteToFile(DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss") + " | " + ex, 0);
            return sqlReader;
        }
        return sqlReader;
    }
            //Functions for closing connections…
            //Functions for reading scalar…
            //etc.

现在从其他模型中,当我尝试使用这些函数时,如下所示:User.cs

internal IEnumerable<User> GetUser()
    {
        var sqlCom = new SqlCommand("SELECT * FROM [user];", Shared.SqlCon);

        using (var blgs = Shared.ORC(sqlCom))
        {
            // ……. … …
            }
        }
    }

还有一件让我困惑的事情是,当这个数据读取函数在登录时第一次被调用时,它工作得很好,但总是第二次调用时会产生问题。
也许我只是不玩写静态属性。但是我必须保持它是静态的,因为它被SqlConnection对象使用,而SqlConnection对象本身是静态的,可以直接从类外部使用。

eh57zj3b

eh57zj3b1#

在Web应用程序中,通常最好通过如下using语句打开和关闭连接:

using (SqlConnection conn = new SqlConnection(connectionString))
    {
     conn.Open();
// do some stuff
}

不要重复使用sqlconnection,因为它会导致你的webapp意外超时。

相关问题