2011-09-21 3 views
0

Я создал приложение 3tier .., где я хочу вызвать метод обновления, который соединяет базу данных и соответственно обновляет записи.Проблемы с SqlConnection в asp.net

ниже - мой уровень доступа к базе данных.

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); 
    } 
} 

теперь, когда я создать объект BusinessLogic и вызвать метод обновления, он вызывает метод обновления в Datalogic, как и ожидалось, но перед обновлением базы данных он выдает ошибку говоря, что для ExecuteNonQuery требуется открытое и доступное соединение. но я уже открыл соединение.

Пожалуйста, помогите мне в отношении соединения.

ответ

0

Проблема в том, что вы открываете два отдельных соединения. Попробуйте следующее:

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(); 
    } 
}