Проблемы с SqlConnection в asp.net - PullRequest
       24

Проблемы с SqlConnection в asp.net

0 голосов
/ 21 сентября 2011

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

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

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 требует открытого и доступного соединения. но я уже открыл соединение.

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

Ответы [ 2 ]

0 голосов
/ 21 сентября 2011

Ваш 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();
   }
}
0 голосов
/ 21 сентября 2011

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

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