从不同选项卡中的数据表中获取值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从不同选项卡中的数据表中获取值相关的知识,希望对你有一定的参考价值。
我有一个表单要求用户上传excel文件。此excel文件具有可包含多个日期的列。一旦用户选择要上传的正确excel文件,表单将为导入的excel文件的每个不同日期创建选项卡(for循环)。 (在每个选项卡中是一个数据表)。
该表包含参考日期和地点(加拿大和所有省份)的列,加拿大和所有省份的值均为“人口”。
在此之后,我有一个保存到SQL数据库的按钮。它有效。但我遇到的问题是保存按钮仅保存上次的最后一个数据表。保存按钮用于保存所有数据表(所有选项卡)
我有想法将第一个数据表存储在临时表中,但我无法弄清楚如何检索早期选项卡中第一个数据表中的值。
是否有(更好的)解决方案试图将最后一个数据表中的最后一个数据表保存到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
答案
弄清楚了。
我的解决方案是创建一个arraylist并将数据表存储到那些arraylist中。保存时,将arraylist.items保存到数据库中
感谢@mary的意见和帮助
以上是关于从不同选项卡中的数据表中获取值的主要内容,如果未能解决你的问题,请参考以下文章