C# SqlCommand.ExecuteScalar()上的InvalidOperationException

C# SqlCommand.ExecuteScalar()上的InvalidOperationException,c#,sql-server,C#,Sql Server,我正在运行一个执行查询的方法,然后在关闭连接之前尝试执行另一个查询。第一个查询执行良好,但第二个查询导致: SqlCommand.ExecuteScalar()方法上的InvalidOperationException 早些时候,我已经完美地运行了它,但有些东西已经改变,我似乎无法追踪。我正在测试连接在执行查询之前是关闭的还是空的,但它不是空的或关闭的。所以这个让我困惑。有人知道发生了什么吗 正在执行的查询非常简单: SELECT COUNT(*) FROM browsers; 我已经在SQ

我正在运行一个执行查询的方法,然后在关闭连接之前尝试执行另一个查询。第一个查询执行良好,但第二个查询导致:

SqlCommand.ExecuteScalar()方法上的InvalidOperationException

早些时候,我已经完美地运行了它,但有些东西已经改变,我似乎无法追踪。我正在测试连接在执行查询之前是关闭的还是空的,但它不是空的或关闭的。所以这个让我困惑。有人知道发生了什么吗

正在执行的查询非常简单:

SELECT COUNT(*) 
FROM browsers;
我已经在SQLServerManagementStudio中对数据库进行了测试,效果很好

    internal static String[,] executeSelect(SqlConnection conn, Query query, Editor reference)
    {
        if (conn == null)
        {
            throw new System.ArgumentNullException("The SqlConnection parameter to method CSED.SQLServerdb.executeSelect(...) is null");
        }
        if (query == null)
        {
            throw new System.ArgumentNullException("The Query parameter to method CSED.SQLSererdb.executeSelect(...) is null");
        }

        String[,] data = null;
        SqlCommand cmd = null;
        SqlDataReader rdr = null;
        SqlCommand cmd2 = null;
        SqlCommand cmd3 = null;

        try
        {
            Debug.WriteLine("SQLServerdb.executeSelect - query: " + query.ToString());
            cmd = new SqlCommand(query.ToString(), conn);
            rdr = cmd.ExecuteReader();
            Field[] flds = query.Fields;
            int columns = flds.Length;
            //Debug.WriteLine("SQLServerdb.executeSelect -columns: " + columns);
            int recordCount = 0;
            List<TableRow> rows = new List<TableRow>();
            TableRow tr = null;
            while (rdr.Read())
            {
                tr = new TableRow();
                recordCount++;
                for (int i = 0; i < columns; i++)
                {
                    tr.Add(DRExtension.GetStringOrNull(rdr, i));
                }
                rows.Add(tr);
            }


            data = convert2DArray(rows, columns);

            //If reference to the class Editor is null then this Database class isn't being used
            //in conjunction with the Editor class.  Therefore, we don't need to calculate the number
            //of records returned from the query.
            if (reference != null && reference.IsUsingSSP)
            {
                bool flag = false;
                int foundrows = 0;
                //GET THE NUMBER OF RECORDS RETURNED BASED ON THE ORIGINAL QUERY.
                String queryStr = "";
                if (query.HaveWhereConditions)
                {
                    queryStr = "SELECT COUNT(*) FROM " + query.GetParentTable() + query.prepareWhere(query.WhereConditions);
                }
                else
                {
                    queryStr = "SELECT COUNT(*) FROM " + query.GetParentTable();
                    flag = true;
                }
                Debug.WriteLine("queryStr: " + queryStr);
                if(conn.State == ConnectionState.Closed)
                    Debug.WriteLine("conn is closed");
                if(conn == null)
                    Debug.WriteLine("conn is NULL");
                cmd2 = new SqlCommand(queryStr, conn);
                object result = cmd2.ExecuteScalar();  //This is where I get the error
                if (result != null)
                {
                    foundrows = Convert.ToInt32(result);
                    query.IFilteredTotal = foundrows;
                }

                //Debug.WriteLine("SQLServerdb.executeSelect - foundrows: " + foundrows);

                //GET THE TOTAL NUMBER OF RECORDS IN THE TABLE.
                if (flag == false)
                {
                    queryStr = "SELECT COUNT(*) FROM " + query.GetParentTable();
                    //Debug.WriteLine("SQLServerdb.executeSelect - queryStr: " + queryStr);
                    cmd3 = new SqlCommand(queryStr, conn);
                    result = cmd3.ExecuteScalar();
                    if (result != null)
                    {
                        int r = Convert.ToInt32(result);
                        // Debug.WriteLine("SQLServerdb.executeSelect - Number of Records in the Table: " + r);
                        query.ITotal = r;
                    }

                }
                else
                {
                    query.ITotal = foundrows;
                }
            }           

        }
        catch (SqlException sqle)
        {
            String extra = "SQL Problem: " + sqle.Message + Constants.NEWLINE;
            extra += "Vendor Error: " + sqle.ErrorCode + Constants.NEWLINE;
            log.Error(extra + sqle.StackTrace);
            Debug.WriteLine(extra + sqle.StackTrace);
        }
        catch (Exception e)
        {
            log.Error("SQLServerdb.executeSelect - query: " + query.ToString());
            log.Error(e.StackTrace);
            Debug.WriteLine(e.StackTrace);
        }
        finally
        {
            // Always make sure result sets and statements are closed,
            // and the connection is returned to the pool
            if(cmd != null)
            {
                cmd.Dispose();
                cmd = null;
            }
            if (cmd2 != null)
            {
                cmd2.Dispose();
                cmd2 = null;
            }
            if (cmd3 != null)
            {
                cmd3.Dispose();
                cmd3 = null;
            }
            if (rdr != null)
            {
                rdr.Close();
                rdr.Dispose();
                rdr = null;
            }
            if (conn != null)
            {
                conn.Close();
                conn.Dispose();
                conn = null;
            }
        }

        return data;
    }//end executeSelect me
internal static String[,]executeSelect(SqlConnection-conn,Query-Query,Editor-reference)
{
如果(conn==null)
{
抛出新的System.ArgumentNullException(“方法CSED.SQLServerdb.executeSelect(…)的SqlConnection参数为null”);
}
if(查询==null)
{
抛出新的System.ArgumentNullException(“方法CSED.SQLSererdb.executeSelect(…)的查询参数为null”);
}
字符串[,]数据=null;
SqlCommand cmd=null;
SqlDataReader rdr=null;
SqlCommand cmd2=null;
SqlCommand cmd3=null;
尝试
{
Debug.WriteLine(“SQLServerdb.executeSelect-query:+query.ToString());
cmd=新的SqlCommand(query.ToString(),conn);
rdr=cmd.ExecuteReader();
字段[]flds=query.Fields;
int columns=flds.Length;
//Debug.WriteLine(“SQLServerdb.executeSelect-columns:+columns”);
int recordCount=0;
列表行=新列表();
TableRow tr=null;
while(rdr.Read())
{
tr=新表行();
recordCount++;
对于(int i=0;i
<