【发布时间】:2014-03-18 08:51:13
【问题描述】:
我正在使用 vb.net 从 sql server 数据库加载数据。我在我的模块中定义了一个数据集
并想以多种形式使用它Public dsDataset As DataSet。当我加载主表单时,我会加载所有表单(如部门和部分)中可能相同的选项,这样我就不必在所有表单中再次加载它们。当从主窗体导航到另一个窗体时,我在窗体构造函数中传递了这个数据集。
在主窗体中,我正在加载这些选项:
Sub loadOptions()
Dim da As SqlDataAdapter
Dim sql As String
Try
sqlConn = New SqlConnection(connString)
sqlConn.Open()
sql = " select depId, name from DEPARTMENT "
da = New SqlDataAdapter(sql, sqlConn)
da.Fill(dsDataset, "department")
sql = " select select depId, sectionId, name from SECTION "
da = New SqlDataAdapter(sql, sqlConn)
da.Fill(dsDataset, "section")
'----------------------------------------------------------------------
sqlConn.Close()
Catch ex As Exception
sqlConn.Close()
MsgBox(Err.Description)
End Try
End Sub
然后假设我有打印机表单,我从数据库加载数据并使用 dsDataset 中的选项而不是再次加载它们。我按如下方式传递数据集:
Dim printers As frmPrinters = New frmPrinters(dsDataset)
printers.ShowDialog()
在打印机表单中,我有一个构造函数,如下所示:
Sub New(ByRef dsDataset As DataSet)
InitializeComponent()
cmbDepartment.DataSource = dsDataset.Tables("department")
cmbDepartment.DisplayMember = "name"
cmbDepartment.ValueMember = "depId"
cmbSection.DataSource = dsDataset.Tables("section")
cmbSection.DisplayMember = "name"
cmbSection.ValueMember = "sectionId"
End Sub
并将所有打印机毫无问题地加载到数据集:
sql = "select * from printer where printerId=" & printerId
daPrinter = New SqlDataAdapter(sql, sqlConn)
daPrinter.Fill(dsDataset, "printer")
dgvPrinters.DataSource = dsDataset.Tables("printers")
现在,当我双击任何打印机时,我会转到另一个表单来加载该特定打印机的详细信息,如下所示:
printerId = dgvPrinters.Rows(dgvPrinters.CurrentRow.Index).Cells(0).Value
printerMode = "modify"
Dim printer As New frmPrinter(dsDataset)
printer.ShowDialog()
在新表单中,我使用上面相同的构造函数,但问题发生在那里。出现以下错误:
Value cannot be null.
Parameter name: dataSet
我做错了什么?
【问题讨论】:
-
您是否尝试过调试代码以查看哪个变量恰好是
null? -
一件事,dsDataset 的值是 Nothing