如何使用外键连接两个数据集来创建新数据集?

时间:2014-02-26 13:14:05

标签: sql vb.net ms-access join dataset

我以前在访问数据库中有一个外部链接表。代码工作正常。

但我认为最好使用代码来定义链接。

所以现在我已经为每个表分隔了sql以填充每个数据集。

如何使用外键加入两个数据集来创建新的组合数据集表?

下面我复制了以前的SQL并尝试创建新的组合数据集。但我不知道该怎么做......请你能帮忙吗?

这是原始代码

        ' Querying data from database
        Using oConn As New OleDbConnection(strConnOrders)

            oConn.Open()

            ' First Select the supplier details best on the specified Preferred Supplier Foreign Key in tblOrderDetails.

            Dim sSQL As String

            sSQL = "SELECT O.fldBarcode, O.fldProductCode, O.fldProductName, O.fldPackSize, O.fldOrderQty, " & vbCrLf & _
                   "O.fldOrderFK, O.fldPrefSupplierFK, S.fldID,IIF(O.fldPrefSupplierFK IS NULL OR O.fldPrefSupplierFK = 0 " & vbCrLf & _
                   "OR O.fldPrefSupplierFK = 34 OR O.fldPrefSupplierFK = 1, 'Unspecified Supplier',S.fldSupplierName) AS fldSupplierName, S.fldSupplierAddress, " & vbCrLf & _
                   "S.fldSupplierPostCode, S.fldSupplierPhone, S.fldSupplierFax, S.fldSupplierEmail, S.fldSupplierWeb, S.fldContactName, " & vbCrLf & _
                   "IIF(S.fldAccountNo IS NULL, 'NA', S.fldAccountNo) AS fldAccountNo " & vbCrLf & _
                   "FROM tblOrderDetails O LEFT OUTER JOIN tblSuppliers S ON O.fldPrefSupplierFK = S.fldID " & vbCrLf & _
                   "WHERE (O.fldSelect = True);"

            Using da As New OleDbDataAdapter(sSQL, oConn)
                da.Fill(ds, "Report1Data")
            End Using

        End Using

这是新的测试代码

        ' THE DATASETS ARE FILLED SEPERATELY THIS TIME
        Dim dsSuppliersTable As New DataSet
        Dim dsOrdersTable As New DataSet
        Dim dsCombinedTable As New DataSet
        Dim dsReportData As New DataSet

        Dim strSqlSupplierFields As String = "SELECT S.fldID, fldSupplierName, S.fldSupplierAddress, S.fldSupplierPostCode, " & _
                                             "S.fldSupplierPhone, S.fldSupplierFax, S.fldSupplierEmail, S.fldSupplierWeb, " & _
                                             "S.fldContactName FROM tblSuppliers;"

        dsSuppliersTable = getDatasetTable(strConnSuppliers, strSqlSupplierFields, "tblSuppliers")  

        Dim strSqlOrderFields As String = "SELECT O.fldBarcode, O.fldProductCode, O.fldProductName, O.fldPackSize, O.fldOrderQty, " & _
                                          "IIF(O.fldPrefSupplierFK IS NULL OR O.fldPrefSupplierFK = 0, S.fldID, " & _
                                          "OR O.fldPrefSupplierFK = 1, 'Unspecified Supplier', S.fldSupplierName) AS fldSupplierName, " & _
                                          "O.fldOrderFK, O.fldPrefSupplierFK FROM tblOrderDetails WHERE (O.fldSelect = True);"

        dsOrdersTable = getDatasetTable(strConnOrders, strSqlOrderFields, "tblOrders")


        If dsOrdersTable.Tables(0).Rows.Count > 0 Then

            ' MERGE THE DATA FROM dsOrdersTable and dsSuppliersTable
            ' LINK THEM TOGETHER USING THE FOREIGN KEY

            dsCombinedTable.Tables("Report1Data") ' I'M NOT SURE WHAT TO DO HERE TO JOIN THE DATASETS TOGETHER

            ' ALSO THE IIF STATEMENT IN strSqlOrderFields IS WRONG NOW, BECAUSE IT USED TO LINK TO THE SUPPLIERS TABLE
            ' HOW CAN I SOLVE THIS?

            ' THEN SAVE THE NEW COMBINED DATASET INTO dsReportData,
            dsReportData.Tables.Add(dsCombinedTable.Tables("Report1Data"))

        End If

        ' THIS IS THE END OF NEW TEST CODE *****************************************************************************

1 个答案:

答案 0 :(得分:1)

在大多数情况下思考

  

最好使用代码来定义链接。

......会错的。数据库经过优化,可以通过多种方式完成此类操作。你只需要编写代码来自己创建第三个数据集,我敢打赌你编写的代码不会像数据库那样高效。

使用加入。它们就是数据库的用途。