我正在尝试将excel电子表格中的数据写入SQL数据库。我已经能够连接到Excel电子表格并读取数据,但我无法将数据插入到SQL DB表中。
当前代码如下
最感谢的任何帮助。
Dim plmExcelCon As System.Data.OleDb.OleDbConnection
Dim ldExcelDS As System.Data.DataSet
Dim cmdLoadExcel As System.Data.OleDb.OleDbDataAdapter
Dim PrmPathExcelFile As String
PrmPathExcelFile = txtImportFileLocation.Text.ToString
plmExcelCon = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PrmPathExcelFile + ";Extended Properties=Excel 12.0;")
cmdLoadExcel = New System.Data.OleDb.OleDbDataAdapter("select * from [" + txtImportSheetName.Text + "$]", plmExcelCon)
ldExcelDS = New System.Data.DataSet
cmdLoadExcel.Fill(ldExcelDS)
dgvImportData.DataSource = ldExcelDS.Tables(0)
plmExcelCon.Close()
cmdINSERT.Parameters("@[SQL COLUMN NAME]").Value = [Not sure how to set value from datagrid view]
cnLD.Open()
cmdINSERT.ExecuteNonQuery()
cnLD.Close()
答案 0 :(得分:1)
我的任务是从Excel中提取一些数据,修改它,并将其放入SQL数据库中。以下是与我的相似之处:
Dim MyConnection As New System.Data.OleDb.OleDbConnection
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
MyConnection = New System.Data.OleDb.OleDbConnection ("provider=Microsoft.Jet.OLEDB.4.0; data source='" + fileLocation + " ';Extended Properties=Excel 8.0;")
' Select the data from the 'Samples' sheet of the workbook.
MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Samples$]", MyConnection)
Dim ds as new DataSet
MyCommand.Fill(ds)
MyConnection.Close()
这几乎就是你已经拥有的,你说它可以从Excel中提取数据。从那里我将遍历DataSet并以这种方式将其添加到数据库:
Dim dt as DataTable = ds.Tables(0)
For each row as DataRow in dt.Rows
dim value1 as String = row("columnName")
dim value2 as Double = row("columnName2")
'Write a function that connects to the database with your parameters
insertIntoDatabase(value1, value2)
Next
希望这是您需要的桥梁(访问DataTable的数据)。祝你好运!
答案 1 :(得分:0)
我不确定您的代码是否能够正常工作。但我认为有更好的方法来解决这个问题。
当我做了这样的事情时,我使用了ACCESS作为数据容器 - 可以将ACCESS链接到EXCEL数据和ODBC源。如果您已在ACCESS中创建了所需的链接,那么运行INSERT INTO SQL查询是一件简单的事情
但我认为你可以在没有ACCESS的情况下这样做 - 因为你可以让VBA认为EXCEL是一个ODBC源 - 所以你可以直接从VBA建立所有连接。
微软支持网站上有文档解释了语法和方法。
答案 2 :(得分:0)
我终于让它使用以下代码
Dim plmExcelCon As New System.Data.OleDb.OleDbConnection
Dim cmdLoadExcel As System.Data.OleDb.OleDbDataAdapter
Dim PrmPathExcelFile As String
PrmPathExcelFile = txtImportFileLocation.Text.ToString
plmExcelCon = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PrmPathExcelFile + ";Extended Properties=Excel 12.0;")
cmdLoadExcel = New System.Data.OleDb.OleDbDataAdapter("select * from [" + txtImportSheetName.Text + "$]", plmExcelCon)
Dim dt As System.Data.DataTable
dt = New System.Data.DataTable
cmdLoadExcel.Fill(dt)
plmExcelCon.Close()
For Each row As DataRow In dt.Rows
Dim impEID As String = row(txtImportEID.Text)
Dim impVID As String = row(txtImportVID.Text)
Try
cmdINSERT.Parameters("@pldLifeDataEID").Value = impEID
cmdINSERT.Parameters("@pldLifeDataVID").Value = impVID
cmdINSERT.Parameters("@pldLifeDataDateEntry").Value = Date.Now
cnLD.Open()
cmdINSERT.ExecuteNonQuery()
cnLD.Close()
Catch ex As Exception
MessageBox.Show(ErrorToString)
End Try
Next
感谢您的所有帮助