OleDbDataReader和bulkcopy.WriteToServer不会写入表

时间:2018-07-26 13:38:41

标签: sql-server vb.net oledbdatareader

我的脚本没有在数据库表中插入任何数据,也没有引发任何错误。

服务器,数据库和表的名称正确。 使用文件对话框(因此文件路径正确)选择工作簿,并且工作表名称似乎也正确。 我在A列中有数据。我的表由2个字段组成:

  1. ID(身份,自动递增)
  2. CustomerName

While循环执行2次迭代,但是我在工作表上有4条记录。

知道为什么数据没有插入表中吗?

    'Open the dialog box to select the file to upload
    Dim fd As OpenFileDialog = New OpenFileDialog()
    Dim strFileName As String

        fd.InitialDirectory = "C:\"
        fd.Filter = "Excel Files|*.xlsx"
        fd.FilterIndex = 2
        fd.RestoreDirectory = True


    'declare variables - edit these based on your particular situation 
    Dim ssqltable As String = "tbl1"

    Dim myexceldataquery As String = "select CustomerName from [A$]"

    'create our connection strings 
    Dim sexcelconnectionstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileName & ";Extended Properties=Excel 12.0;"


    Dim ssqlconnectionstring As String = "Data Source=AA1\SQL001_DEV001;Initial Catalog=DB_Test;Integrated Security=True"

    'execute a query to erase any previous data from our destination table 
    Dim sclearsql As String = Convert.ToString("delete from ") & ssqltable

    Dim sqlconn As New SqlClient.SqlConnection(Connections.MyMainSQLServer)

    Dim sqlcmd As New SqlCommand(sclearsql, sqlconn)

        sqlconn.Open()
        sqlcmd.ExecuteNonQuery()
        sqlconn.Close()

    'series of commands to bulk copy data from the excel file into our sql table 
    Dim oledbconn As New OleDbConnection(sexcelconnectionstring)
    Dim oledbcmd As New OleDbCommand(myexceldataquery, oledbconn)

        oledbconn.Open()

    Dim dr As OleDbDataReader = oledbcmd.ExecuteReader()
    Dim bulkcopy As New SqlBulkCopy(ssqlconnectionstring)

        bulkcopy.DestinationTableName = ssqltable

        While dr.Read()
            bulkcopy.WriteToServer(dr)
        End While

        dr.Close()
        oledbconn.Close()

1 个答案:

答案 0 :(得分:1)

Dim ExcelConnection As New System.Data.OleDb.OleDbConnection ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyExcelSpreadsheet.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=Yes""")
ExcelConnection.Open()

Dim expr As String = "SELECT * FROM [Sheet1$]"

Dim objCmdSelect As OleDbCommand = New OleDbCommand(expr, ExcelConnection)
Dim objDR As OleDbDataReader

Dim SQLconn As New SqlConnection()
Dim ConnString As String = "Data Source=MMSQL1;Initial Catalog=DbName; User Id=UserName; Password=password;"
SQLconn.ConnectionString = ConnString
SQLconn.Open()


Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(SQLConn)
bulkCopy.DestinationTableName = "TableToWriteToInSQLSERVER"

Try
  objDR = objCmdSelect.ExecuteReader
  bulCopy.WriteToServer(objDR)
  objDR.Close()
  SQLConn.Close()

 Catch ex As Exception
  MsgBox(ex.ToString)
 End Try
End Using