有额外的点使用OLEDB读取Excel的CSV文件的文件名 [英] Reading Excel csv file with extra dot in file name using OLEDB

查看:227
本文介绍了有额外的点使用OLEDB读取Excel的CSV文件的文件名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经练成csv文件,在文件名点。 (这是行业命名惯例,所以我不能改变它。)我想读取使用OLEDB的所有数据。如果我从文件名,我命令作品删除点。如果不是它说无效的对象。如何忽略/解决点在文件名?

文件名:ABC试题库步道2014年2月$ 18083.65.csv

我的code:

 公共功能GetAllData(BYVAL文件名作为字符串)作为数据表

    尝试
        昏暗DT作为新数据表

        使用CON作为新的OleDbConnection随着{.ConnectionString =的String.Format(ConnectionNoHeader,Path.GetDirectoryName(文件名))}
            cn.Open()
            昏暗SQLAdapter作为OleDbDataAdapter的=新OleDbDataAdapter的()
            昏暗的CMD作为OleDbCommand的=新的OleDbCommand(SELECT * FROM [+ Path.GetFileName(文件名)+],CON)
            SQLAdapter.SelectCommand = CMD
            SQLAdapter.Fill(DT)

        结束使用
        返回DT
    抓住
        返回任何结果
    结束尝试
端功能
 

解决方案

<一个href="http://social.msdn.microsoft.com/Forums/en-US/22302a07-d599-46c5-be19-6164156e7762/reading-a-csv-file-with-embedded-periods-in-the-file-name-using-oledbcommand?forum=adodotnetdataproviders" rel="nofollow">http://social.msdn.microsoft.com/Forums/en-US/22302a07-d599-46c5-be19-6164156e7762/reading-a-csv-file-with-embedded-periods-in-the-file-name-using-oledbcommand?forum=adodotnetdataproviders建议使用API​​调用GetShortPathName使用旧的MS-DOS 8.3版的文件名。

 进口System.IO
进口System.Data.OleDb
进口了System.Runtime.InteropServices加入这一行

公共类Form1中
  添加以下行
  声明统一code函数GetShortPathName库KERNEL32.DLL别名GetShortPathNameW(BYVAL longPath作为字符串,其中&;的MarshalAs(UnmanagedType.LPTStr)&GT; BYVAL ShortPath作为System.Text.StringBuilder,&LT;的MarshalAs(UnmanagedType.U4 )&GT; BYVAL BUFFERSIZE为整数)作为整数

  私人小组的button1_Click(发送者为对象,E作为EventArgs的)把手Button1.Click
    DIM DTB作为数据表= GetAllData(C:\垃圾\ ABC测试的银行步道2014年2月$ 18083.65.csv)
    DataGridView1.DataSource = DTB
  结束小组

  公共职能GetAllData(BYVAL文件名作为字符串)作为数据表
    尝试
      昏暗DT作为新数据表
      昏暗strcnn作为字符串=供应商= Microsoft.Jet.OLEDB.4.0;数据源='&放大器; Path.GetDirectoryName(文件名)及';扩展属性=文字; HDR =无; FMT =分隔符号
      使用CON作为新的OleDbConnection随着{.ConnectionString = strcnn}
        con.Open()
        昏暗SQLAdapter作为OleDbDataAdapter的=新OleDbDataAdapter的()
        如果INSTR(文件名。)&LT;&GT; InStrRev(文件名。),然后添加这些行
          昏暗某人作为新System.Text.StringBuilder(256)添加这些行
          呼叫GetShortPathName(文件名,SB,256)添加这些行
          文件名= sb.ToString'添加这些行
        结束如果添加这些行
        DIM strcmd作为字符串=SELECT * FROM [+ Path.GetFileName(文件名)+]
        昏暗CMD作为OleDbCommand的=新的OleDbCommand(strcmd,CON)
        SQLAdapter.SelectCommand = CMD
        SQLAdapter.Fill(DT)
      结束使用
      返回DT
    抓住
      返回任何结果
    结束尝试
  端功能
末级
 

I have excel csv file with a dot in file name. (This is the industry naming convention, so I cannot change it.) I am trying to read all data using OLEDB. If I remove the dot from file name, my command works. If not it says invalid object. How to ignore/resolve dot in file name ?

file name : ABC Test bank Trail Feb 2014 $ 18083.65.csv

my code:

Public Function GetAllData(ByVal FileName As String) As DataTable

    Try
        Dim dt As New DataTable

        Using con As New OleDbConnection With {.ConnectionString = String.Format(ConnectionNoHeader, Path.GetDirectoryName(FileName))}
            cn.Open()
            Dim SQLAdapter As OleDbDataAdapter = New OleDbDataAdapter()               
            Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM [" + Path.GetFileName(FileName) + "]", con)
            SQLAdapter.SelectCommand = cmd
            SQLAdapter.Fill(dt)

        End Using
        Return dt
    Catch
        Return Nothing
    End Try
End Function

解决方案

http://social.msdn.microsoft.com/Forums/en-US/22302a07-d599-46c5-be19-6164156e7762/reading-a-csv-file-with-embedded-periods-in-the-file-name-using-oledbcommand?forum=adodotnetdataproviders suggests using the API call GetShortPathName to use the old MS-DOS 8.3 version of the filename.

Imports System.IO
Imports System.Data.OleDb
Imports System.Runtime.InteropServices 'Add this line'

Public Class Form1
  'Add the following line'
  Declare Unicode Function GetShortPathName Lib "kernel32.dll" Alias "GetShortPathNameW" (ByVal longPath As String, <MarshalAs(UnmanagedType.LPTStr)> ByVal ShortPath As System.Text.StringBuilder, <MarshalAs(UnmanagedType.U4)> ByVal bufferSize As Integer) As Integer

  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim dtb As DataTable = GetAllData("C:\Junk\ABC Test bank Trail Feb 2014 $ 18083.65.csv")
    DataGridView1.DataSource = dtb
  End Sub

  Public Function GetAllData(ByVal FileName As String) As DataTable
    Try
      Dim dt As New DataTable
      Dim strcnn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & Path.GetDirectoryName(FileName) & "';Extended Properties=""text;HDR=No;FMT=Delimited"""
      Using con As New OleDbConnection With {.ConnectionString = strcnn}
        con.Open()
        Dim SQLAdapter As OleDbDataAdapter = New OleDbDataAdapter()
        If InStr(FileName, ".") <> InStrRev(FileName, ".") Then   'Add these lines'
          Dim sb As New System.Text.StringBuilder(256)            'Add these lines'
          Call GetShortPathName(FileName, sb, 256)                'Add these lines'
          FileName = sb.ToString                                  'Add these lines'
        End If                                                    'Add these lines'
        Dim strcmd As String = "SELECT * FROM [" + Path.GetFileName(FileName) + "]"
        Dim cmd As OleDbCommand = New OleDbCommand(strcmd, con)
        SQLAdapter.SelectCommand = cmd
        SQLAdapter.Fill(dt)
      End Using
      Return dt
    Catch
      Return Nothing
    End Try
  End Function
End Class

这篇关于有额外的点使用OLEDB读取Excel的CSV文件的文件名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆