0

データベースに関連するすべてのアクティビティで動作するように作成したモデルに次のコードがあるため、データベースで動作するたびに冗長なコードを記述する必要はありません。このモデル クラスは次のようになります。

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))
        {
            // ……. … …
            }
        }
    }

私を混乱させるもう1つのことは、ログイン中にここから初めてこのデータ読み取り関数が呼び出されたときに、問題が発生するのは常に2回目の呼び出しであるということです。

静的プロパティで書き込みをしていないだけかもしれません。SqlConnectionしかし、それ自体が静的であるオブジェクトによって使用され、クラスの外部から直接使用されるため、静的に保つ必要があります。

親切に助けてください。

4

1 に答える 1

0

Web アプリでは、通常、次のような using ステートメントを使用して接続を開いたり閉じたりする方が適切です。

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

Web アプリケーションで予期しないタイムアウトが発生する可能性があるため、sqlconnection を再利用しないでください。

于 2013-04-07T08:40:48.067 に答える