2012-11-02 140 views
1

我使用下面的代碼從excel文件中獲取數據。在打開連接時,出現以下錯誤。任何人都可以告訴我如何解決這個問題?讀取excel文件時出錯

請求'System.Data.OleDb.OleDbPermission,System.Data,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'類型權限失敗。

注意:ExcelFilePath是存儲在本地驅動器中的excel文件的路徑。

String connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", ExcelFilePath); 

DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb"); 

      DbConnection connection = factory.CreateConnection(); 

      connection.ConnectionString = connectionString; 

      connection.Open(); // GIVES ERROR 

      DataTable tbl = connection.GetSchema("Tables"); 

      connection.Close(); 

      foreach (DataRow row in tbl.Rows) 
      { 
       //get sheets. 

      } 
+0

它是一個web應用程序? – Tariqulazam

+0

其實它的一個共享點的web應用程序項目 – sharmila

+0

你可以給錯誤(Stacktrace)的完整描述? – Dany

回答

2

此錯誤通常是由代碼訪問安全性引起的。嘗試以完全信任模式運行您的應用程序。

<trust level="Full" originUrl="" /> 
+0

我要在哪裏給予充分信任?我的項目沒有web.config文件 – sharmila

+0

恐怕您需要具備某種共享點管理權限。本文可能會給你一些細節http://msdn.microsoft.com/en-us/library/dd583158(v=office.11​​).aspx – Tariqulazam

0

如果使用32位系統則配置文件是在位置

%windir%\Microsoft.NET\Framework\{version}\CONFIG

如果使用64位系統則配置文件是在位置

%windir%\Microsoft.NET\Framework64\{version}\CONFIG

試試這個。

您遇到的異常表示包含您註冊的存儲過程的C#程序集相對於.Net框架代碼訪問安全性(CAS)策略而言,沒有足夠的權限來創建OleDbConnection對象。這可能意味着你的程序集註冊了PERMISSION_SET = SAFE,如果在CREATE ASSEMBLY DDL語句中沒有指定PERMISSION_SET,這也是默認的。

要解決這個問題,您可以重新註冊您的程序集WITH PERMISSION_SET = EXTERNAL_ACCESS以訪問ADO.Net類(包括OleDbConnection)。如果您使用的是Visual Studio,則必須在C#數據庫項目的屬性頁中將此更改從SAFE更改爲EXTERNAL_ACCESS。

有關詳情,請http://msdn.microsoft.com/en-us/library/0x4t63kb.aspx

+0

Hi..thasnks我在我的應用程序中使用了.net framework 3.5。並在文件夾%windir%\ Microsoft.NET \ Framework64 \ {版本} \版本是v3.5我canr找到配置和任何配置文件。有任何想法嗎? – sharmila

+0

實際上有配置文件夾和該文件夾包含配置文件。但是,無論您是使用32位還是64位系統? – Dany

+0

它的64位機器 – sharmila