簡體   English   中英

VB.net調試sqldatareader-立即窗口

[英]VB.net Debug sqldatareader - immediate window

場景是這樣; 我有一個sqldatareader查詢,當我嘗試使用datatable.load將sqldatareader轉換為datatable時,似乎沒有返回任何內容。

因此,我對其進行了調試,在進入sqldatareader之前,我先獲取了詳細的SQL查詢,以確保其格式正確。 我將其復制並粘貼到SQL Server中以運行它,並查看它是否返回任何內容。 是的,一行。

我回到Visual Studio,讓程序繼續,我創建了一個數據表並嘗試加載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 server中並運行它,則會得到一行結果。

有什么想法我做錯了嗎?

######### UPDATE ############

我現在注意到,它似乎比每個SQL查詢返回的行少了一行。 因此,如果我自己運行SQL並獲得1行,則數據表似乎具有0行。 如果查詢返回4行,則數據表有3行! 很奇怪,有人有想法嗎?

#########進一步更新############

好的,在使用datatable.load方法之前,我已經完成了一個循環以計數datareader的行。 在我的測試查詢中,我在datareader中得到4行(正確數量),一旦我使用datatable.load方法,它說datatable為空,這是怎么回事?

###### 好

因此,數據讀取器似乎是單向的,要遍歷它來獲取行數,就其他任何代碼而言,它基本上是空的。 沒意識到它只是向前,一旦讀完就不會“復位”。

將此行插入dt.load(dr)上方,在調試窗口中檢查該值:

Debug.WriteLine("Datareader has rows: " & dr.HasRows)

還可以通過將cm.ExecuteReader()更改為來確保關閉連接:

cm.ExecuteReader(CommandBehavior.CloseConnection);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM