2011-09-21 8 views
0

私は3tierアプリケーションを作成しました。データベースを接続してそれに応じて更新メソッドを呼び出す必要があります。asp.netのSqlConnectionの問題

以下は私のデータベースアクセスレイヤーです。以下

public class DataLogic 
{ 
    public DataLogic() 
    { 
    } 

    public SqlConnection ConnectDatabase 
    { 
     get { return new SqlConnection(ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString); } 
    } 

    public int UpdateArticle(BusinessLogic b, int ArticleId) 
    { 
     int updateExecuted = -1; 
     StringBuilder formParamString = new StringBuilder(); 
     formParamString.Append("IsArticlePaging=" + b.IsPagingEnable + " "); 
     string updateString = "update crossarticle_article set " + formParamString.ToString() + "where id = " + ArticleId + ""; 
     try 
     { 
      using (SqlCommand comUpdateArticle = new SqlCommand(updateString, ConnectDatabase)) 
      { 
       ConnectDatabase.Open(); 
       updateExecuted = comUpdateArticle.ExecuteNonQuery(); 
      } 
     } 
     catch (Exception ex) { HttpContext.Current.Response.Write(ex.Message); } 
     finally { ConnectDatabase.Close(); } 
     return updateExecuted; 
    } 
} 

は今、私のビジネスロジック層

public class BusinessLogic 
{ 
    DataLogic dLogic = new DataLogic(); 
    public BusinessLogic() 
    { 

    } 
    private bool _IsPagingEnable; 

    public bool IsPagingEnable 
    { 
     get { return _IsPagingEnable; } 
     set { _IsPagingEnable = value; } 
    } 
    private int _articleID; 
    public int ArticleID 
    { 
     get { return _articleID; } 
     set { _articleID = value; } 
    } 

    public int UpdateExtraFieldArticle() 
    { 
     return dLogic.UpdateArticle(this, ArticleID); 
    } 
} 

である私は、ビジネスロジックのオブジェクトを作成および更新メソッドを呼び出したときに、期待どおりにデータロジックのupdateメソッドを呼び出しますが、データベースを更新する前に、それはエラーをスローしますExecuteNonQueryにはオープンで利用可能な接続が必要です。しかし私はすでに接続を開いています。

SQL接続に関して助けてください。

答えて

0

問題は2つの別々の接続を開くことです。試してみてください次:

using (sqlConnection connection = ConnectDatabase) 
{ 
    using (SqlCommand comUpdateArticle = new SqlCommand(updateString, connection)) 
    { 
     connection.Open(); 
     updateExecuted = comUpdateArticle.ExecuteNonQuery(); 
    } 
} 
0

あなたConnectDatabase常に新しい接続を返します。

public SqlConnection ConnectDatabase 
{ 
get { return new SqlConnection(ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString); } 
} 

あなたはローカル変数を使用し、工場法から一度それを初期化する必要があります

public SqlConnection CreateConnection 
{ 
    return new SqlConnection(ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString); 
} 

の場合を例:

using (SqlConnection con = CreateConnection()) 
{ 
    using (SqlCommand comUpdateArticle = new SqlCommand(updateString, con)) 
    { 
     con.Open(); 
     updateExecuted = comUpdateArticle.ExecuteNonQuery(); 
    } 
}