Вот как бы я это сделал:
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
Я удалил значение параметра "MasterDataSet" из daMaster.Fill()
, потому что при его добавлении 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
, но если вы не получили ожидаемых данных, скорее добавьте их.