2016-09-07 64 views
0

我搜索为什么从Excel到SQL表输入不(通过vb.net)故障数据从Excel中复制使用BulkCopy到SQL(vb.net)

Excel文件中工作良好的原因输入包含1300行和12列。最后五列包含价格。 输入后,我的表格如果填满了excel数据,除了两个最后的“价格”列,其中所有的数据都是'空'。 奇怪的是,我的所有“价格”列在SQL目标表中的格式与相同的类型(十进制(18,2)),即使在Excel文件。 对于副本,我使用SqlBulkCopy,我想知道这个函数是不是有限的。

这里是我的代码:

 Dim ExcelConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fTransp & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes""") 

     ExcelConnection.Open() 

     Dim RequeteExcelTransp As String = "SELECT * FROM [ExcelCetup$]" 

     Dim objCmdSelect As OleDbCommand = New OleDbCommand(RequeteExcelTransp, ExcelConnection) 

     Dim objDR As OleDbDataReader 

     Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(ConnexionLinkyStat) 
      bulkCopy.DestinationTableName = "dbo." & TableTransp & "" 

      Try 
       objDR = objCmdSelect.ExecuteReader 
       bulkCopy.WriteToServer(objDR) 
       objDR.Close() 
       ConnexionLinkyStat.Close() 

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

     ExcelConnection.Close() 
+0

您是否确认这些列正在读取在尝试批量复制之前将它放入'objDR'中? – topshot

+0

@topshot是的,我确认objDR读取所有列 – Elhendriks

+0

我假设列名完全相同,但可能试着'SqlBulkCopyColumnMapping'来确保。 – topshot

回答

0

我想这一个代码,希望此代码对你很有帮助项目

私人小组的button1_Click(BYVAL发件人为System.Object的,BYVAL e As System.EventArgs)Handles Button1.Click

 Dim MyConnection As System.Data.OleDb.OleDbConnection 
    Dim DtSet As System.Data.DataSet 
    Dim MyCommand As System.Data.OleDb.OleDbDataAdapter 

    Dim fBrowse As New OpenFileDialog 
    With fBrowse 
     .Filter = "Excel files(*.xlsx)|*.xlsx|All files (*.*)|*.*" 
     .FilterIndex = 1 
     .Title = "Import data from Excel file" 
    End With 
    If fBrowse.ShowDialog() = Windows.Forms.DialogResult.OK Then 
     Dim fname As String 
     fname = fBrowse.FileName 
     MyConnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source='" & fname & " '; " & "Extended Properties=Excel 8.0;") 
     MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection) 
     MyCommand.TableMappings.Add("Table", "Test") 
     DtSet = New System.Data.DataSet 
     MyCommand.Fill(DtSet) 
     MyConnection.Close() 
     For Each Drr As DataRow In DtSet.Tables(0).Rows 
      Execute_Local("INSERT INTO Excel(Name, Designation, Salary) VALUES ('" & Drr(0).ToString & "','" & Drr(1).ToString & "','" & Drr(2).ToString & "')") 
     Next 
     MsgBox("Successfully Saved") 

    End If 

End Sub`