【发布时间】:2015-11-19 16:29:41
【问题描述】:
我在使用 Excel 表更新 sql 表时遇到问题。事实是,我正在开发这个小项目,用户可以首先通过单击 vb.net 应用程序中的按钮将包含 StudentNumber、SubjectID、ClassScore、ExamScore 的课程列表导出或打印到 excel 表格中,然后编辑表格通过填写 ClassScore 和 ExamScore,然后通过 vb.net 将工作表上传回 sql。 问题是如何检查当前 StudentNumber 或行是否存在于 sql 表中,然后更新表,否则插入新行。 这是我使用 SQLBulk Copy 的代码,剩下的就是在 vb.net 中更新 sql 表
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ofd As New OpenFileDialog
If ofd.ShowDialog() <> System.Windows.Forms.DialogResult.OK Then Exit Sub
' Dim dgv As System.Windows.Forms.DataGridView
With ofd
.Filter = "Excel files(*.xls)|*.xls|All files (*.*)|*.*"
.FilterIndex = 1
.Title = "Import data from Excel file"
End With
Dim nme As String = ofd.FileName
Import(nme, dgv)
End Sub
Public Shared Function Import(ByVal FileName As String, ByVal dgv As DataGridView) As Boolean
Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim DtSet As System.Data.DataSet
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties=Excel 12.0 Xml;")
'MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\vb.net-informations.xls';Extended Properties=Excel 8.0;")
MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)
MyCommand.TableMappings.Add("Table", "Scores")
DtSet = New System.Data.DataSet
MyCommand.Fill(DtSet)
dgv.DataSource = DtSet.Tables(0)
MyConnection.Close()
Dim expr As String = "SELECT * FROM [Sheet1$]"
Dim SQLconn As New SqlConnection()
Dim ConnString As String = "Data Source=xxxx-PC;Initial Catalog=TryExcel;Persist Security Info=True;User ID=xx;Password=xxxx"
Dim objCmdSelect As OleDbCommand = New OleDbCommand(expr, MyConnection)
Dim objDR As OleDbDataReader
SQLconn.ConnectionString = ConnString
Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(ConnString)
bulkCopy.DestinationTableName = "Scores"
MyConnection.Open()
objDR = objCmdSelect.ExecuteReader
bulkCopy.WriteToServer(objDR)
objDR.Close()
SQLconn.Close()
End Using
Return True
End Function
Private Shared Function safefilename() As String
Throw New NotImplementedException
End Function
【问题讨论】:
标签: sql vb.net excel sql-update