1. 程式人生 > >C#報錯提示

C#報錯提示

閱讀器關閉時嘗試呼叫 MetaData 無效

    while (reader2.Read())
    {
        // Console.WriteLine("{0},{1},{2}",reader[0],reader[1],reader[2])
        Console.WriteLine("{0},{1},{2}", reader["id"], reader["age"], reader["name"]);
    }
       //前面的reader關閉了,現在還在嘗試呼叫

已有開啟的與此 Command 相關聯的 DataReader,必須首先將它關閉
原因:
SqlCommand在每次執行ExecuteNonQuery()方法之後,內部會生成一個空的DataReader物件,該物件只有在資料庫連線關閉之後,才會被釋放掉
解決辦法
資料庫連線字串中新增MultipleActiveResultSets=true 且 保證每次執行cmd.ExecuteReader()時cmd名字不同,就不會報錯

        SqlDataReader reader = cmd1.ExecuteReader();
        while(reader.Read())
        {
            // Console.WriteLine("{0},{1},{2}",reader[0],reader[1],reader[2])
            Console.WriteLine("{0},{1},{2}", reader["id"], reader["age"], reader["name"]);
        }
        SqlDataReader reader2 = cmd1.ExecuteReader();
       //必須建一個cmd2, SqlDataReader reader2 = cmd2.ExecuteReader();