VB Forms,用两个SELECT语句填充数据集

时间:2014-02-19 19:21:43

标签: sql vb.net dataset

我正在开展一个学校项目。

我在使用2个SELECT查询填充数据集时遇到问题

   sql = "SELECT PhoneNo, Forename, Surname, Address, Postcode FROM tblCustomerInfo"
    Conn.Open()
    da1 = New OleDb.OleDbDataAdapter(sql, Conn)
    'initialises connection with the database and runs sql statement 
    da1.Fill(ds1, "Order")

    sql = "SELECT OrderNo, Total, OrderDate, OrderTime FROM tblOrder"
    da2 = New OleDb.OleDbDataAdapter(sql, Conn)
    'initialises connection with the database and runs sql statement 
    da2.Fill(ds1, "Order")

    MaxRows = ds1.Tables("Order").Rows.Count
    count = -1

    Label1.Text = ds1.Tables("Order").Rows(0).Item(5)
 Label1.Text = ds1.Tables("Order").Rows(0).Item(5)
     

是测试第二个数据集,但是我遇到了“dbnull”错误。

感谢您提前的时间。

编辑:从“DBNull”类型到“String”类型的转换无效。 例外细节

3 个答案:

答案 0 :(得分:0)

尝试将两个SQL语句合并为一个,用分号分隔。然后使用单个DataAdapter运行该查询。你可能会得到它。我没有测试它。但它应该有用。

答案 1 :(得分:0)

我通常使用System.Data.SqlClient库在ASP.Net VB中执行这样的查询(即,我使用SqlConnection,SqlCommand和SqlDataAdapter而不是OleDb),但假设它的工作方式相同,我可以告诉你我认为我看到的是错误的。

更改

Label1.Text = ds1.Tables("Order").Rows(0).Item(5)

Label1.Text = ds1.Tables("Order").Rows(0)(5)

虽然,我通常首先为行定义一个变量,因为它更容易循环并引用各种列名。像这样......

Dim r as DataRow = ds1.Tables("Order").Rows(0)
Label1.Text = r("column/field name") 'I'm sure you can use an index number instead of the field name, but I normally just reference the field name, so I may be mistaken.

答案 2 :(得分:0)

似乎某些记录具有空值。数据集项的集合是一个基于0的索引,因此要检查第五个字段(在select语句中只有五个),您可能必须使用“.Rows(0).Item(4)”。如果您的记录中包含空值,请检查它...

If Not ds1.Tables("Order").Rows(0).Item(4) Is DBNull.Value Then

     Label1.Text = ds1.Tables("Order").Rows(0).Item(4).ToString()

End If