2011-08-08 3 views
1

OleDbConnection 문자열 형식에 문제가 있습니다. Excel 파일에 액세스 할 때 OleDb 클래스를 사용합니다.OleDbConnection 문제 - 폴더 이름에 공백이 포함되어 있습니다.

데이터 테이블에 엑셀 테이블을로드하는 방법입니다.

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 : 빈 \ 릴리스 \ 구성 \ simcard.xls

문제가이 폴더 이름 C# 프로젝트는 \ \ C# 프로젝트가 AUSK \ T-TOOL의 \의 T-TOOL을 \ - 포함 공백

이 폴더 이름에서 공백을 제거하면 올바르게 작동합니다.

하지만 어떻게 해결할 수 있습니까? 변경 폴더 이름은 나를위한 해결책이 아닙니다.

+1

[이] (http://stackoverflow.com/questions/4849332/how-to-specify-the-connection-string-if-the-excel- 파일 이름 포함 - 공백)? –

답변

1

당신에게 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

파일 주변에 담기 [] :

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

을 . 위의 첫 번째 해결 방법은 "공급자"를 "DataSource"속성으로 설정하는 반면 Microsoft.ACE.OLEDB.12.0 공급자는 파일 이름 인클로저로 대괄호를 사용하지 않으므로 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 Services = -1

관련 문제