У меня есть форма, которая требует от пользователя загрузить файл 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