1

我正在使用下面的代码从 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.

            }
4

2 回答 2

2

此错误通常是由代码访问安全性引起的。尝试以完全信任模式运行您的应用程序。

<trust level="Full" originUrl="" />
于 2012-11-02T12:01:33.610 回答
0

如果您使用的是 32 位系统,则配置文件位于

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

如果您使用的是 64 位系统,则配置文件位于

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

尝试这个。

您遇到的异常表明包含您注册的存储过程的 C# 程序集没有足够的权限来创建 OleDbConnection 对象,相对于 .Net 框架代码访问安全 (CAS) 策略。这可能意味着您的程序集已注册为 WITH PERMISSION_SET = SAFE,如果在 CREATE ASSEMBLY DDL 语句中未指定 PERMISSION_SET,这也是默认设置。

要解决此问题,您可以使用 PERMISSION_SET = EXTERNAL_ACCESS 重新注册您的程序集以访问 ADO.Net 类(包括 OleDbConnection)。如果您使用的是 Visual Studio,则必须在 C# 数据库项目的属性页面中将其从 SAFE 更改为 EXTERNAL_ACCESS。

有关更多详细信息,请查看http://msdn.microsoft.com/en-us/library/0x4t63kb.aspx

于 2012-11-02T12:22:54.983 回答