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;
}
你应该使用"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))
{
...
}