2012-11-02 73 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