我使用以下代码从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 :(得分:2)
此错误通常由代码访问安全性引起。尝试以完全信任模式运行您的应用程序。
<trust level="Full" originUrl="" />
答案 1 :(得分:0)
如果您使用的是32位系统,则配置文件位于
位置 %windir%\Microsoft.NET\Framework\{version}\CONFIG
如果您使用的是64位系统,则配置文件位于
位置 %windir%\Microsoft.NET\Framework64\{version}\CONFIG
试试这个。
您遇到的异常表示,与.Net框架代码访问安全性(CAS)策略相关,包含您注册的存储过程的C#程序集没有足够的权限来创建OleDbConnection对象。这可能意味着您的程序集已使用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