使用vb.net将数据从Excel导入到SQL Server

我正在使用vb.net将数据从Excel导入到SQL Server数据库中。 在我的Excel文件的bNumber列中,有不同types的值,即一些是数字,一些是文本:

 Telenorx Telenorx 8 97150219924 97150219924 97150219924 97150219924 Easypayx 92 

当我通过OleDbCommand从Excel中select数据时,它会正确检索数字,但是文本值为空。

在Excel中,列的数据types是General

这是我从Excel中检索数据的代码。

 excelConn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + OpenFileDialog1.FileName + ";Extended Properties=""Excel 12.0 Xml;HDR=Yes""") Dim oleDbCommand As OleDbCommand = New OleDbCommand("Select bNumber from [Sheet1$]", excelConn) excelConn.open() Dim dataReader = oleDbCommand.ExecuteReader dataReader.read() 

这不一定是你的情况下的解决scheme,但我会做的是创build一个SQL Server表与bNumber作为nvarchar,使用SQL Serverpipe理工作室导出到Excel中,我把Excel文件放在项目的bin \ Debug文件夹。 使用下面的所有行正确返回的代码(因为我们有一个string列string返回)。

这里的关键是在连接string中使用IMEX = 1,Excel可以是挑剔的,这可能会或可能不会解决问题。

 Imports System.Data.OleDb Public Class Operations Public Function GetData(ByVal FileName As String) As List(Of String) Dim valueList As New List(Of String) Using cn As New OleDbConnection With { .ConnectionString = ConnectionString(FileName) } Using cmd As OleDbCommand = New OleDbCommand("SELECT bNumber FROM [Table_1$]", cn) cn.Open() Dim reader As OleDbDataReader = cmd.ExecuteReader While reader.Read valueList.Add(reader.GetString(0)) End While End Using End Using Return valueList End Function Public Function ConnectionString(ByVal FileName As String) As String Dim Builder As New OleDbConnectionStringBuilder If IO.Path.GetExtension(FileName).ToUpper = ".XLS" Then Builder.Provider = "Microsoft.Jet.OLEDB.4.0" Builder.Add("Extended Properties", "Excel 8.0;IMEX=1;HDR=Yes;") Else Builder.Provider = "Microsoft.ACE.OLEDB.12.0" Builder.Add("Extended Properties", "Excel 12.0;IMEX=1;HDR=Yes;") End If Builder.DataSource = FileName Return Builder.ConnectionString End Function End Class 

表格代码

 Private Sub Button3_Click(sender As Object, e As EventArgs) _ Handles Button3.Click Dim ops As New Operations Dim fileName As String = IO.Path.Combine( AppDomain.CurrentDomain.BaseDirectory, "Downloaded.xlsx") Dim valueList As List(Of String) = ops.GetData(fileName) For Each value As String In valueList Console.WriteLine(value) Next End Sub 

结果在IDE输出窗口中

在这里输入图像说明

表结构

在这里输入图像说明

工作表

在这里输入图像说明

编辑:下面的链接指向MSDN代码示例使用SpreadSheetLight库。 下载后,将启动窗体设置为StackOverFlow1QuestionMixedTypesForm。 右键单击解决scheme资源pipe理器中的解决scheme,然后select“恢复NuGet包”,现在构build并运行项目。 表单上有两个button,第一个是Sheet1的混合types,而第二个是Sheet2中不同的相同数据的变体。

代码示例https://code.msdn.microsoft.com/Alternate-methods-to-work-4c52c4a2