Проблема со строкой OleDbConnection - имя папки содержит пробел - PullRequest
1 голос
/ 08 августа 2011

У меня проблема с форматом строки OleDbConnection. Я использую классы OleDb при доступе к файлу Excel.

Вот метод, который загружает таблицу Excel в набор данных.

    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();
        }

    }

Этот метод работает хорошо. Проблема в том, если я пытаюсь использовать этот метод с относительным путем в приложении WPF.

LoadExcelFileToDataSet(Config\\simcard.xls,sheetName)

полный путь: E: \ C # PROJECTS \ AUSK \ T-TOOL \ T-TOOL \ bin \ Release \ Config \ simcard.xls

Проблема в названии этой папки C # PROJECTS - содержит пробел

Если убрать пробел из этого имени папки, он будет работать хорошо.

Но как это решить? Смена имени папки не является решением для меня.

Ответы [ 3 ]

1 голос
/ 08 августа 2011

Вы можете попробовать использовать OleDbConnectionStringBuilder класс:

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());
1 голос
/ 08 августа 2011

Поместите [] вокруг файла:

string connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                         "Data Source=[" + file + "];" +
                         "Extended Properties=Excel 8.0;";
0 голосов
/ 16 августа 2011

Я собираюсь добавить свой собственный опыт после того, как мне не удалось использовать два предложения выше. Первое решение, приведенное выше, заключается в установке «Provider» в качестве свойства «DataSource», а второе не подходит для поставщика Microsoft.ACE.OLEDB.12.0, поскольку они используют кавычки, а не скобки в качестве вложений имен файлов. Итак, мое (проверенное) решение было:

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

Это закончилось строкой вроде (обратите внимание на кавычки): Поставщик = Microsoft.ACE.OLEDB.12.0; Источник данных = "c: \ datafile.accdb"; Службы OLE DB = -1

...