DB连接问题仅在某些时候出现

本文关键字:候出现 连接 问题 DB | 更新日期: 2023-09-27 18:04:12

我有一个问题,下面的代码,没有任何编码错误,但有时它抛出一些异常。我只是想知道任何代码组织问题?,如何修复

有时会显示异常

1。ExecuteReader需要一个打开的可用连接。连接的当前状态是关闭的。

2。当读取器关闭时,调用FieldCount无效。

但有时它工作没有任何问题,如预期的

My Coding Goes here

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

DB连接问题仅在某些时候出现

你应该使用"using"结构:

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

我不知道为什么当你打电话时,连接有时会关闭

ExecuteReader()

但是为什么不像这样使用using块呢:

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

当它失去作用域时将关闭与DB的连接。

通过使用inglock

来防止在两个或多个线程中使用同一个连接
lock(_conDb)
{
    //// your code here
}

并将conDb封装在using block中,如下所示

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