Сценарий таков; У меня есть запрос sqldatareader, который, похоже, ничего не возвращает, когда я пытаюсь преобразовать sqldatareader в таблицу данных с помощью datatable.load.
Итак, я отлаживаю его, я беру подробный SQL-запрос до того, как он попадет в sqldatareader, просто чтобы убедиться, что он правильно отформатирован. Я копирую и вставляю это на SQL-сервер, чтобы запустить его и посмотреть, вернет ли он что-нибудь. Так и есть, один ряд.
Я возвращаюсь в визуальную студию и позволяю программе продолжать работу, я создаю таблицу данных и пытаюсь загрузить sqldatareader, но он просто возвращает пустой считыватель. Я сбит с толку тем, что происходит.
Я скопирую версию кода (не точный SQL-запрос, который я использую, но близкий) здесь:
Dim cn As New SqlConnection
cn.ConnectionString = <connection string details here>
cn.Open()
Dim sqlQuery As String = "select * from Products where productid = 5"
Dim cm As New SqlCommand(sqlQuery, cn)
Dim dr As SqlDataReader = cm.ExecuteReader()
Dim dt as new DataTable
dt.load(dr)
dt должен иметь содержимое, но он пуст. Если я скопирую этот SQL-запрос на сервер sql и запущу его, я получу ряд результатов.
Любые идеи, что я делаю неправильно?
######### ОБНОВЛЕНИЕ ############
Теперь я заметил, что он, похоже, возвращает на одну строку меньше, чем я получаю с каждым SQL-запросом. Итак, если я сам запускаю SQL и получаю 1 строку, то в таблице данных будет 0 строк. Если запрос возвращает 4 строки, в таблице данных их 3!! Очень странно, есть идеи?
######### ДОПОЛНИТЕЛЬНОЕ ОБНОВЛЕНИЕ #############
Хорошо, я сделал цикл для подсчета строк устройства чтения данных перед использованием метода datatable.load. В моем тестовом запросе я получаю 4 строки (правильное количество) в устройстве чтения данных, как только я использую метод datatable.load, он говорит, что таблица данных пуста, что происходит?!
###### OkТаким образом, кажется, что устройство чтения данных - это односторонняя вещь, итерация по нему, чтобы получить количество строк, и она по существу пуста, если речь идет о любом другом фрагменте кода. Не понимал, что это было только вперед и не «сбрасывалось» после прочтения.