Invalid attempt to call FieldCount when reader is closed

后端 未结 5 597
长发绾君心
长发绾君心 2020-12-20 03:45

The error above occurs when I try to do a dataReader.Read on the data recieved from the database. I know there are two rows in there so it isnt because no data actually exis

相关标签:
5条回答
  • 2020-12-20 03:56

    When I got that error, it happened to be a command timeout problem (I was reading some large binary data). As a first attempt, I increased the command timeout (not the connection timeout!) and the problem was solved. Note: while attempting to find out the problem, I tried to listen to the (Sql)connection's StateChanged event, but it turned out that the connection never fall in a "broken" state.

    0 讨论(0)
  • 2020-12-20 04:04

    Your code, as displayed is fine. I've taken it into a test project, and it works. It's not immediately clear why you get this message with the code shown above. Here are some debugging tips/suggestions. I hope they're valuable for you.

    • Create a breakpoint on the while (dataReader.Read()). Before it enters its codeblock, enter this in your Immediate or Watch Window: dataReader.HasRows. That should evaluate to true.

    • While stopped on that Read(), open your Locals window to inspect all the properties of dataReader. Ensure that the FieldCount is what you expect from your SELECT statement.

    • When stepping into this Read() iteration, does a student object get created at all? What's the value of dataReader["StructureID"] and all others in the Immediate Window?

    It's not the CommandBehavior.CloseConnection causing the problem. That simply tells the connection to also close itself when you close the datareader.

    0 讨论(0)
  • 2020-12-20 04:05

    Same problem here. Tested all the above solutions

    • increase command timeout
    • close the connection after read

    Here's the code

        1 objCmd.Connection.Open()
        2 objCmd.CommandTimeout = 3000
        3 Dim objReader As OleDbDataReader = objCmd.ExecuteReader()
        4 repeater.DataSource = objReader
        5 CType(repeater, Control).DataBind()
        6 objReader.Close()
        7 objCmd.Connection.Dispose()
    

    Moreover, at line 4 objReader has Closed = False

    0 讨论(0)
  • 2020-12-20 04:09

    When you use the Using in C#, after the last } from the using, the Connection automatically close, thats why you get the fieldcount to be closed when u try to read him, as that is impossible, because u want those datas, read then before close the using, or u can open and close manually the connection, by not using the (using)

    0 讨论(0)
  • 2020-12-20 04:18

    I got this exception while using the VS.NET debugger and trying to examine some IQueryable results. Bad decision because the IQueryable resulted in a large table scan. Stopping and restarting the debugger and NOT trying to preview this particular IQueryable was the workaround.

    0 讨论(0)
提交回复
热议问题