Сценарий это; У меня есть запрос sqldatareader, который, кажется, ничего не возвращает, когда я пытаюсь преобразовать sqldatareader в datatable, используя datatable.load.VB.net Debug sqldatareader - немедленное окно
Так что я отлаживаю его, я захватываю подробный SQL-запрос, прежде чем он войдет в sqldatareader, чтобы убедиться, что он отформатирован правильно. Я копирую и вставляю это в SQL-сервер, чтобы запустить его и посмотреть, вернет ли он что-нибудь. Это один ряд.
Я возвращаюсь в визуальную студию и продолжаю программу, создаю datatable и пытаюсь загрузить 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)
дт должна иметь содержание, но он пуст. Если я копирую этот SQL-запрос в sql-сервер и запускаю его, я получаю ряд результатов.
Любые идеи, что я делаю неправильно?
######### UPDATE ############
Я теперь заметил, что, кажется, возвращается один меньше строк, чем я получаю с каждый SQL-запрос. Итак, если я запускаю SQL сам и получаю 1 строку, тогда у datatable должно быть 0 строк. Если запрос возвращает 4 строки, у datatable есть 3! Очень странно, какие-нибудь идеи?
######### ДАЛЕЕ UPDATE ############
Ok Я сделал цикл для подсчета строк в DataReader перед использованием метод datatable.load. В моем тестовом запросе я получаю 4 строки (правильное количество) в datareader, как только я использую метод datatable.load, он говорит, что datatable пуст, что происходит ?!
###### OkТак что, похоже, DataReader это односторонняя вещь, итерацию через него, чтобы получить количество строк, и это по существу пустой, как далеко, как и любой другой кусок кода обеспокоен. Не понимал, что это только форвард и не будет «перезагружаться» после прочтения.
Я видел очень похожие результаты из-за того, что VB.Net анализирует (из-за отсутствия лучшего термина) ... Попробуйте использовать «очевидные» синтаксические механизмы для использования, такие как [] вокруг табличных имен и/или столбцов в столбце SQL и т. Д. Вы также можете попробовать использовать SqlDataAdapter (.fill) вместо .load и посмотреть, показывают ли данные вверх. – tobrien
Да, SqlDataReader работает только вперед, поскольку в документации говорится: «Предоставляет способ чтения прямого потока строк из базы данных SQL Server». http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx –