Problem with OleDbConnection string - folder name contain white space

别等时光非礼了梦想. 提交于 2019-12-11 11:14:08

问题


I have problem with OleDbConnection string format. I use OleDb classes on access to Excel file.

Here is method wich load excel table to dataset.

    public  DataSet LoadExcelFileToDataSet(string file,
        string sheetName)
    {
        string connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                             "Data Source=" + file + ";" +
                             "Extended Properties=Excel 8.0;";
        var oledbConn = new OleDbConnection(connString);
        try
        {
            // Open connection
            oledbConn.Open();

            // Create OleDbCommand object and select data from worksheet Sheet1
            var cmd = new OleDbCommand("SELECT * FROM [" + sheetName + "$]", oledbConn);

            // Create new OleDbDataAdapter
            var oleda = new OleDbDataAdapter { SelectCommand = cmd };

            // Create a DataSet which will hold the data extracted from the worksheet.
            var ds = new DataSet();

            // Fill the DataSet from the data extracted from the worksheet.
            oleda.Fill(ds, "SIMCards");

            return ds;
        }
        catch(Exception ex)
        {
            throw ex;
        }
        finally
        {
            // Close connection
            oledbConn.Close();
        }

    }

This method works good. Problem is if I try use this method with relative path in WPF app.

LoadExcelFileToDataSet(Config\\simcard.xls,sheetName)

full path is : E:\C# PROJECTS\AUSK\T-TOOL\T-TOOL\bin\Release\Config\simcard.xls

Problem is this folder name C# PROJECTS - contains white space

If remove white space from this folder name, it works good.

But how to solve it? Change folder name is not solution for me.


回答1:


You can try using the OleDbConnectionStringBuilder class:

var sb = new System.Data.OleDb.OleDbConnectionStringBuilder();
sb.Provider = "Microsoft.Jet.OLEDB.4.0";
sb.DataSource = @"E:\C# PROJECTS\AUSK\T-TOOL\T-TOOL\bin\Release\Config\simcard.xls";
sb.Add("Extended Properties", "Excel 8.0");
MessageBox.Show(sb.ToString());



回答2:


Put [] around the file:

string connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                         "Data Source=[" + file + "];" +
                         "Extended Properties=Excel 8.0;";



回答3:


I'm going to add my own experience after I failed using the two suggestions above. The first solution above is setting "Provider" as "DataSource" property while the second is not suitable for Microsoft.ACE.OLEDB.12.0 provider because they are using quotes not brackets as file name enclosures. So, my (tested) solution was:

Dim sb As OleDbConnectionStringBuilder = New System.Data.OleDb.OleDbConnectionStringBuilder()
sb.Provider = "Microsoft.ACE.OLEDB.12.0"
sb.DataSource = "c:\datafile.accdb"
sb.OleDbServices = -1
Using connection As New OleDbConnection(sb.ToString())
....
End Using

This ended up in a string like (note the quotes): Provider=Microsoft.ACE.OLEDB.12.0;Data Source="c:\datafile.accdb";OLE DB Services=-1



来源:https://stackoverflow.com/questions/6983973/problem-with-oledbconnection-string-folder-name-contain-white-space

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!