2011-11-22 54 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补充说,但如果你没有得到的数据你期望,然后添加它。