我有一张表格,要求用户上传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
答案 0 :(得分:0)
想通了。
我的解决方案是创建一个arraylist并将数据表存储到这些arraylist中。 保存时,将arraylist.items保存到数据库
感谢@mary提供评论和帮助