executeScalar不断返回异常错误

时间:2011-08-31 22:21:47

标签: .net

我正在使用'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;
    }

我不知道下一步该尝试什么!当我切换到“使用”格式时,此代码曾经工作并且最近停止工作。但即使我改回来,它现在也出错了。

1 个答案:

答案 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)
     }
}