从不同选项卡中的数据表获取值

时间:2018-09-11 11:58:56

标签: sql-server vb.net datatable tabs save

我有一张表格,要求用户上传excel文件。此excel文件的一列可以包含多个日期。一旦用户选择了合适的excel文件上传,表单就会为导入的excel文件具有的每个不同的日期创建标签(用于循环)。 (在每个标签中是一个数据表)。

该表包括参考日期和位置(加拿大和所有省)的列,加拿大和所有省的价目表是“人口”。

在此之后,我有一个保存到SQL数据库的按钮。而且有效。但是我遇到的问题是,保存按钮仅保存上次的LAST数据表。保存按钮用于保存所有数据表(所有标签)

我本来想将第一个数据表存储在一个临时表中,但是我不知道如何在前面的选项卡中检索第一个数据表中的值。

是否有(更好的)解决方案尝试将不仅仅是最后一个选项卡中的最后一个数据表保存到SQL数据库?  .. 保存按钮动作处理程序

Private Sub btnSaveDB_Click(sender As Object, e As EventArgs) Handles BtnSaveDB.Click
    If Not sumDts Is Nothing Then
        If Save() Then 'Save is successful
            'Say save is successful
            MsgBox("save done.")

        End If
    Else MsgBox("Nothing To save In DB.", MsgBoxStyle.Information, "Error message.")
    End If
    'MsgBox("Nothing To save In DB.", MsgBoxStyle.Information, "Error message.")

End Sub

该按钮确实没有太多代码

Public Function Save() As Boolean
    Dim bSave As Boolean = False
    Dim comSql As New SqlCommand
    comSql.CommandType = CommandType.Text
    Dim myCommand As New SqlCommand
    Dim myTrans As SqlTransaction = Nothing
    Dim MaxCompEstID As Object = Nothing
    Dim compID As Integer
    myTrans = DatabaseConnection.BeginTransaction(IsolationLevel.ReadCommitted)
    myCommand.Connection = DatabaseConnection
    myCommand.Transaction = myTrans
    myCommand.CommandType = CommandType.StoredProcedure

    Try
        comSql.Connection = DatabaseConnection
        comSql.Transaction = myTrans

        myCommand.CommandText = "INSERT INTO dbo.T_LFS_PROV_Component_Total_NPR (CompEstID, ProvCode, population)"

        comSql.CommandText = "SELECT CompEstID FROM T_LFS_PROV_Component_Total_NPR " &
                        " (UPDLOCK) WHERE CompEstID IN " &
                        " (SELECT LastID=MAX(CompEstID) FROM T_LFS_PROV_Component_Total_NPR)"

        MaxCompEstID = comSql.ExecuteScalar()
        If IsNothing(MaxCompEstID) Or IsDBNull(MaxCompEstID) Then
            compID = 1
        Else
            compID = CType(MaxCompEstID, Double) + 1
        End If

        SaveComponent(myCommand, compID)
        myTrans.Commit()
        bSave = True


    Catch ex As Exception

        myTrans.Rollback()
        MsgBox("An exception of type " & ex.GetType().ToString() &
                   " Message : " & ex.Message.ToString() &
                   " : was encountered while attempting to SAVE  ", MsgBoxStyle.Exclamation, "Save LFS NPR")
        Debug.Print("...")
    End Try

    Return bSave
End Function

compID应该与每个日期相关。在此示例中,excel文件具有两个不同的日期。 (这就是为什么有两个不同的选项卡)也许将compID链接到每个日期都可以解决我的问题

这是保存的第二部分

 Private Sub SaveComponent(ByRef oCommand As SqlCommand, ByVal compID As Integer)

    oCommand.CommandText = "LFS_Save_NPR_Total"

    For i As Integer = 0 To 12

        oCommand.Parameters.Add(New SqlParameter("@ProvCode", FindProvCodeForSelectedTabIndex(i)))
        oCommand.Parameters.Add(New SqlParameter("@Population", sumDts.Rows(0)(i + 3))) 'change sumdts.rows(0)(i+3)... to NEW DATA TABLE?
        oCommand.Parameters.Add(New SqlParameter("@CompEstID", compID))
        oCommand.ExecuteNonQuery()
        oCommand.Parameters.Clear()

    Next

    oCommand.Parameters.Add(New SqlParameter("@ProvCode", FindProvCodeForSelectedTabIndex(13)))
    oCommand.Parameters.Add(New SqlParameter("@Population", sumDts.Rows(0)(2)))
    oCommand.Parameters.Add(New SqlParameter("@CompEstID", compID))
    oCommand.ExecuteNonQuery()
    oCommand.Parameters.Clear()

End Sub

1 个答案:

答案 0 :(得分:0)

想通了。

我的解决方案是创建一个arraylist并将数据表存储到这些arraylist中。 保存时,将arraylist.items保存到数据库

感谢@mary提供评论和帮助