数据库连接只会发生一些问题

时间:2014-05-20 17:56:53

标签: c# asp.net webmethod

我对下面的代码有问题,没有任何编码错误但有时它会引发一些异常。我只是想知道任何代码组织问题? &安培;如何解决它。

有时会显示这些例外

  

1.ExecuteReader需要一个开放且可用的连接。连接的当前状态已关闭。

     

2.读取器关闭时无效尝试调用FieldCount。

但有时候它没有任何问题,正如预期的那样

我的编码在这里

 [WebMethod, ScriptMethod]
public static List<HomeImageSliders> GetHomeImageSliders()
{
    List<HomeImageSliders> HomeImageList = new List<HomeImageSliders>();
    try
    {
        SqlCommand comHomeImage = new SqlCommand("SP_GetHomeImageSliders", conDB);
        comHomeImage.CommandType = CommandType.StoredProcedure;
        if (conDB.State != ConnectionState.Open)
        {
            conDB.Open();
        }

        SqlDataReader rdr = comHomeImage.ExecuteReader();
        DataTable dt = new DataTable();

            dt.Load(rdr);
            foreach (DataRow r in dt.Rows)
            {
                HomeImageList.Add(new HomeImageSliders
                {
                    Id = (int)r["Id"],
                    ImagePath = r["ImagePath"].ToString(),
                    ModifiedDate = Convert.ToDateTime(r["ModifiedDate"]).Date

                });
            }

    }
    catch (Exception ee)
    {
    }
    finally
    {
        conDB.Close();
    }
    return HomeImageList;
}

3 个答案:

答案 0 :(得分:2)

你应该使用&#34;使用&#34;构造:

(using ommand comHomeImage = new SqlCommand("SP_GetHomeImageSliders", conDB) {
    (using SqlDataReader rdr = new SqlDataReader) {
        //do some things
    }

}

答案 1 :(得分:2)

我不知道为什么在致电时有时会关闭您的连接

ExecuteReader()

但为什么不使用像这样的使用块:

using(SqlConnection conDB = new SqlConnection(connectionString))
{
 ...
}

当它丢失范围时,这将关闭与DB的连接。

答案 2 :(得分:1)

尝试使用lock

防止使用与两个或多个线程相同的连接
lock(_conDb)
{
    //// your code here
}

并将你的conDb包装在使用块中,如下所示

using(SqlConnection conDB = new SqlConnection(connectionString))
{
 ...
}