我正在使用'using'构造但是当我在循环中快速加载图像时,我收到以下错误:
ExecuteScalar需要一个开放且可用的连接。连接的当前状态是连接。
奇怪的是,每次运行它时,它都会在循环的不同时间发生。
我搜索了我的整个解决方案,并且在以下任何地方都没有调用Open()或Close():
public myMethod()
{
string conString;
conString = "Server=(local);Database=myDB;Uid=appaccess;Pwd=xxxxxx";
con = new SqlConnection(conString);
con.Open();
}
public void Dispose()
{
con.Close();
}
然后在我的代码中,我在imgIDs循环中调用此方法:
public byte[] GetImageBitStream(int imgID)
{
SqlCommand cmd = new SqlCommand("GetImageBitStream", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@imgID", imgID));
Object picData = new Object();
picData = cmd.ExecuteScalar();
if (picData == null)
{
picData = "";
}
return (byte[])picData;
}
我不知道下一步该尝试什么!当我切换到“使用”格式时,此代码曾经工作并且最近停止工作。但即使我改回来,它现在也出错了。
答案 0 :(得分:1)
听起来像连接泄漏给我。
尝试按以下方式重构:
string conString;
conString = "Server=(local);Database=myDB;Uid=appaccess;Pwd=xxxxxx";
using (var con = new SqlConnection(conString))
{
con.Open();
foreach (int id in imgIdCollection)
{
var img = GetImageBitStream(id,con)
}
}