SqlDataReader对象在每次对其执行操作时抛出异常

时间:2016-04-03 10:23:08

标签: c# sql-server

我正在开发VS13和SQL Server 2012中的项目,我遇到了一个小问题。我似乎无法从我的数据库中读取数据。每当我尝试对用于读取数据的SqlDataReader对象执行任何操作时,它都会抛出异常。

我得到的例外是InvalidOperationException

看看我的这段代码,我用SQL查询作为参数调用此函数,并将返回的对象存储在另一个SqlDataReader对象中。

private SqlDataReader reader (string sqCommand)
{
        myConnection.Open();
        string string1;
        string1 = sqCommand;
        SqlDataReader a = null;

        try
        {
            SqlCommand Newcommand = new SqlCommand(string1, myConnection);
            a = Newcommand.ExecuteReader();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }

        myConnection.Close();

        if (a.Read())      //**statement 1**
            return a;
        else
            return null;
    }

我在上面的代码中标记的语句1中以及我在对象a或接收它的对象上执行的每个操作中都获得了异常。

有人可以告诉我我的代码有什么问题或提供任何其他解释吗?如果需要更多代码的其他部分来查找错误,我可以提供它。

感谢您提供的时间和帮助。 :)

1 个答案:

答案 0 :(得分:4)

当您使用SqlDataReader时,您的连接需要保持打开状态。 SqlDataReader的更常规用法如下:

private List<object> Reader(string sqCommand)
{
    using (SqlConnection myConnection = new SqlConnection(ConnectionString))
    {
        myConnection.Open();

        using (SqlCommand cmd = new SqlCommand(sqCommand, myConnection))
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            List<object> list = new List<object>();

            while (reader.Read())
            {
                list.Add(reader[0]);
            }

            return list;
        }
    }
}