我对下面的代码有问题,没有任何编码错误但有时它会引发一些异常。我只是想知道任何代码组织问题? &安培;如何解决它。
有时会显示这些例外
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;
}
答案 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))
{
...
}