我可以正確地更新與datatable
一個SQL數據庫表如下:使用的TableAdapter來更新數據庫表與一個DataTable
Dim resultsDataTable As New DataTable()
Dim dtpHExportDataTable As New DataTable()
Dim cnString As String = <<<ConnectionString>>>
Using cnSQL1 As New SqlConnection
cnSQL1.ConnectionString = cnString
Using adapter1 = New SqlDataAdapter("SELECT SampleNo, Results, Complete_Date, Dex_Row_Id " & "FROM LIMS.dbo.Analytical_Sample_Log_ResultsInfo", cnSQL1)
Dim builder1 As New SqlCommandBuilder(adapter1)
adapter1.UpdateCommand = builder1.GetUpdateCommand()
Using New SqlCommandBuilder(adapter1)
adapter1.Fill(resultsDataTable)
resultsDataTable.PrimaryKey = New DataColumn() {resultsDataTable.Columns("Dex_Row_Id")}
dtpHExportDataTable = resultsDataTable.Clone()
AddResultsRow(dtpHExportDataTable, 13581, "4.4", "2015-01-01", 45598)
AddResultsRow(dtpHExportDataTable, 13590, "5.5", "2015-01-01", 45618)
AddResultsRow(dtpHExportDataTable, 13604, "6.6", "2015-01-01", 45655)
resultsDataTable.Merge(dtpHExportDataTable)
ShowResult(resultsDataTable) ‘looks perfect
adapter1.Update(resultsDataTable) ‘database table IS updated correctly
End Using
End Using
End Using
然而,當我在上面的代碼擴展到我的電子表格工作簿頁面應用程序中,resultsDataTable
(由DevExpress
ShowResult(resultsDataTable)顯示)使用上面的代碼以及下面的代碼顯示正確的信息。但數據庫表不使用以下代碼更新:
Dim worksheet As Worksheet = SpreadsheetControl.Document.Worksheets.ActiveWorksheet
Dim range As Range = worksheet.Selection
Dim rangeHasHeaders As Boolean = True
' Create a data table with column names obtained from the first row in a range if it has headers.
' Column data types are obtained from cell value types of cells in the first data row of the worksheet range.
Dim resultsDataTable As New DataTable()
Dim dtpHExportDataTable As DataTable = worksheet.CreateDataTable(range, rangeHasHeaders)
Dim cnString As String = "<<<ConnectionString>>>"
Using cnSQL1 As New SqlConnection
cnSQL1.ConnectionString = cnString
Using adapter1 = New SqlDataAdapter("SELECT SampleNo, Results, Complete_Date, Dex_Row_Id " & "FROM LIMS.dbo.Analytical_Sample_Log_ResultsInfo", cnSQL1)
Dim builder1 As New SqlCommandBuilder(adapter1)
adapter1.UpdateCommand = builder1.GetUpdateCommand()
Using New SqlCommandBuilder(adapter1)
adapter1.Fill(resultsDataTable)
resultsDataTable.PrimaryKey = New DataColumn() {resultsDataTable.Columns("Dex_Row_Id")}
dtpHExportDataTable = resultsDataTable.Clone()
Dim exporter As DataTableExporter = worksheet.CreateDataTableExporter(range, dtpHExportDataTable, rangeHasHeaders)
' Perform the export.
exporter.Export()
resultsDataTable.Merge(dtpHExportDataTable)
ShowResult(resultsDataTable) ‘looks perfect
adapter1.Update(resultsDataTable)) ‘database table is NOT updated
End Using
End Using
End Using
我不確定'worksheet.CreateDataTableExporter'做了什麼,但可能是它使用原始DataRow版本,因此它看不到更改。嘗試在'adapter1.Update'後面導出數據。 –
代理,工作表.CreateDataTableExporter是一個DevExpress.com擴展,它從電子表格的指定範圍內獲取數據,並根據需要跳過標題行並填充指定的數據表。嘗試在adapter1.Update之後導出數據不起作用。 – TCIslandTime
我猜Merge()沒有設置合併行的行狀態添加...所以你的resultsDataTable沒有變化,你的Update()什麼都不做...... – PrfctByDsgn