我正在开展一个学校项目。
我在使用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”类型的转换无效。 例外细节
答案 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