2011-11-22 93 views
1

在VB.NET/Access中有DataSet問題。 代碼應返回1條記錄並在窗體上顯示結果。VB.NET - 「位置0沒有行」但數據庫中的記錄

基本上當我通過在調試模式下,它返回1行工作正常, 但是當我沒有斷點運行代碼我得到錯誤信息的代碼步驟:

沒有排在位置0

VB.NET 2010 & MS訪問97

Dim sConnectionString As String = "dsn=MyDatabase" 
Dim sSQL As String = "" 
Dim DBConnection As New OdbcConnection(sConnectionString) 

Dim dsMaster As New DataSet 
Dim daMaster As New OdbcDataAdapter 
Dim dtMaster As New DataTable 

Try 
    DBConnection.Open() 

    sSQL = "SELECT * FROM myTable" 
    daMaster.SelectCommand = New OdbcCommand(sSQL, DBConnection) 
    daMaster.Fill(dsMaster, "MasterDataSet") 

    If dsMaster.Tables(0).Rows.Count <> 0 Then 
     dtMaster = dsMaster.Tables(0) 

     sItem1 = dtMaster.Rows(0).Item(0).ToString 
     sItem2 = dtMaster.Rows(0).Item(1).ToString 
     sItem3 = dtMaster.Rows(0).Item(2).ToString 
    Else 
     MessageBox.Show("No Records Available", "Error", MessageBoxButtons.OK) 
    End If 
  • 當我運行代碼時,我收到消息框沒有記錄
  • 當我在IF聲明的斷點運行調試模式時,我得到的消息框沒有記錄
  • 當我在FILL聲明中使用斷點運行在調試模式下時,我得到1條記錄返回並執行IF語句中的代碼。

任何想法?

+0

您的'daMaster.Fill'正在填充名爲「MasterDataSet」的表,嘗試更改您的If語句以檢查'dsMaster.Tables(「MasterDataSet」)。Rows.Count' 或者,從Fill方法中刪除參數。 – Ortund

+0

感謝您的回覆Logan,現在只能看到您的帖子。當我有機會並且讓它知道它是否有效時我會嘗試。 – Eireash

回答

1

這是我會怎麼做:

Dim sConnectionString As String = "dsn=MyDatabase" 
Dim sSQL As String = "" 
Dim DBConnection As New OdbcConnection(sConnectionString) 

Dim dsMaster As New DataSet 
Dim daMaster As New OdbcDataAdapter 
Dim dtMaster As New DataTable 

Try 

    DBConnection.Open() 

    sSQL = "SELECT * FROM myTable" 
    daMaster.SelectCommand = New OdbcCommand(sSQL, DBConnection) 
    daMaster.Fill(dsMaster) 

    If dsMaster.Tables(0).Rows.Count <> 0 Then 
     dtMaster = dsMaster.Tables(0) 

     sItem1 = dtMaster.Rows(0).Item(0).ToString 
     sItem2 = dtMaster.Rows(0).Item(1).ToString 
     sItem3 = dtMaster.Rows(0).Item(2).ToString 
    Else 
     MessageBox.Show("No Records Available", "Error", MessageBoxButtons.OK) 
    End If 

我從daMaster.Fill()去掉了「MasterDataSet」參數值,因爲其添加會離開dsMaster.Tables(0)空,把你所有的查詢數據dsMaster.Tables("MasterDataSet")

看起來這很可能是您的錯誤來自何處。
此外,您並不需要dtMaster,因爲當您填充數據時,數據已存在於DataTable(dsMaster.Tables(0))中。

所以你只需引用這些列以同樣的方式:

sItem1 = dsMaster.Tables(0).Rows(0)(0).ToString 

記住,提供的列名,使其更容易閱讀的代碼。所以,如果你有以下查詢:

Dim sSQL As String = "SELECT Username, UserMail FROM Users WHERE UserID = 3" 

獲取的數據是這樣的:

sItem1 = dsMaster.Tables(0).Rows(0)("Username") 

你並不特別需要的.ToString補充說,但如果你沒有得到的數據你期望,然後添加它。