OLEDB读取CSV时字符串首尾空格被自动去除,求VB.NET解决方案
解决OLEDB读取CSV时自动修剪字符串首尾空格的问题
我完全理解你现在的困扰——依赖OLEDB和VB.NET的现有机制读取CSV时,字符串首尾的空格被自动截断,而这些空格是业务需要保留的,没法事后补回去。其实问题的关键就在schema.ini的配置细节上,你之前没用到专门控制空格修剪的属性。
核心解决方法:给列添加Trimmed=No属性
OLEDB的文本驱动默认会对Text类型的列自动修剪首尾空格,要关闭这个默认行为,只需要在schema.ini的每一列定义末尾加上Trimmed=No即可。
修改后的schema.ini如下:
[test.csv] Format=Delimited(|) Col1=Column1 Text Trimmed=No Col2=Column2 Text Trimmed=No Col3=Column3 Text Trimmed=No Col4=Column4 Text Trimmed=No
你的VB.NET代码调整建议
现有代码逻辑没问题,不过可以用Using语句优化资源管理(自动释放连接、命令和阅读器资源),调整后的代码如下:
Private Sub Main() Try Dim dirInfo As String = "C:\csv" ' 使用Using自动管理资源生命周期 Using conn As New OleDbConnection($"Provider=Microsoft.ACE.OLEDB.12.0; Data Source={dirInfo};Extended Properties=""Text;HDR=Yes;""") conn.Open() Using cmd As New OleDbCommand("SELECT * From [test.csv]", conn) Using myAccessDataReader As OleDbDataReader = cmd.ExecuteReader() If myAccessDataReader.HasRows Then myAccessDataReader.Read() Console.WriteLine("|" + myAccessDataReader.Item("Column1") + "|") Console.WriteLine("|" + myAccessDataReader.Item("Column2") + "|") Console.WriteLine("|" + myAccessDataReader.Item("Column3") + "|") Console.WriteLine("|" + myAccessDataReader.Item("Column4") + "|") End If End Using End Using End Using Console.ReadKey() Catch ex As Exception Throw New Exception(ex.Message) End Try End Sub
为什么之前的设置无效?
你尝试过的编码、MaxScanRows、固定宽度等配置,都和OLEDB的自动空格修剪行为无关。Trimmed是专门控制该行为的开关,默认值为Yes,必须显式设置为No才能保留字符串首尾的空格。
最终测试结果
修改schema.ini后运行代码,就能得到你预期的输出:
|Text1 | | Text2| | Text3 | |Text4|
内容的提问来源于stack exchange,提问作者Arsey
相关产品推荐
相关产品推荐

