You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:14:50