使用vb.net将数据从Excel导入SQL Server
我使用vb.net将数据从Excel导入SQL Server数据库。在我的Excel文件,在bNumber
列,有不同类型的值,即有些数字和一些文字:正确使用vb.net将数据从Excel导入SQL Server
Telenorx
Telenorx
8
97150219924
97150219924
97150219924
97150219924
Easypayx
92
当我通过OleDbCommand
选择从Excel中的数据,其检索数字,但作为空白文本值。
在Excel中,列的数据类型为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()
这不一定是你的情况的解决方案还没有将我所做的就是创建一个SQL-Server表与B-号码为nvarchar的,使用SQL-Server Management Studio中导出到Excel我把放在那里的Excel文件中的项目的bin \ Debug文件夹。使用下面的所有行正确返回的代码(因为我们有一个字符串列字符串返回)。
这里的关键是在连接字符串中使用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输出窗口
表结构
工作表
编辑:下面的链接指向与SpreadSheetLight库工作一个MSDN代码示例。下载后,将启动窗体设置为*1QuestionMixedTypesForm。右键单击解决方案资源管理器中的解决方案并选择“恢复NuGet包”,现在构建并运行项目。表单上有两个按钮,第一个是Sheet1的混合类型,而第二个是Sheet2中不同的相同数据的变体。
代码示例https://code.msdn.microsoft.com/Alternate-methods-to-work-4c52c4a2
感谢您的努力和关注。你只需在我提供的excel中输入值,但事实并非如此。我的问题是在Excel文件中,因为列类型是'常规'。如果我选择数据,那么我的查询无法检索“文本”作为常规,如果我将列类型更改为“文本”,则可以提取所有数据,但数字会变成这样。 9.23495E + 11, 9.23495E + 11, 9.23494E + 11。另外,我不希望用户更改Excel列类型。 –
如果打开一个替代方法,有一个免费的库可能会有所帮助,称为SpreadSheetLight。阅读Excel数据时,该库提供更多*。下面是所有示例都在他们的网站上的C#,但本周在MSDN上创建了一个代码示例,显示了大多数常见操作和启动,今天早上创建了一个示例,它会给你一个运行的开始,我可以追加到我的第一个回复,只是让我知道(这是在VB.NET) –
是的,为什么不,我会感激它,我也可以在C#代码。考虑到我的excel文件有多个不同的数据类型的列,我不希望我的应用程序用户更改列的数据类型,因为我认为用户打开excel文件会很不方便,更改列的数据类型,然后来到我的应用程序并上传文件。还要注意的是,我从外部接收excel文件,应用程序用户只需选择文件并上传数据。 –
什么是您的SQL数据类型? – Mederic
你能提供一些你在做什么的细节吗?你如何查询数据?给我们一些东西。 –
如果您的代码有问题,则应该发布上述代码。这是不可能的,除非说你有一个错误 –