有谁知道如何在 C# 中通过 OLEDB 写入 Excel 文件(.xls)?我正在执行以下操作:

   OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (...)", connection);
   dbCmd.CommandTimeout = mTimeout;
   results = dbCmd.ExecuteNonQuery();

但我收到一条 OleDbException 抛出消息:

“无法修改表'test $'的设计。它在只读数据库中。”

我的连接似乎很好,我可以很好地选择数据,但我似乎无法将数据插入到 Excel 文件中,有谁知道我如何通过 OLEDB 获得对 Excel 文件的读/写访问权限?

有帮助吗?

解决方案

你需要添加 ReadOnly=False; 到你的连接字符串

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=fifa_ng_db.xls;Mode=ReadWrite;ReadOnly=false;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";

其他提示

我也在寻找和答案,但 Zorantula 的解决方案对我不起作用。我找到了解决方案 http://www.cnblogs.com/zwwon/archive/2009/01/09/1372262.html

我删除了 ReadOnly=false 参数和 IMEX=1 延伸财产。

IMEX=1 属性以导入模式打开工作簿,因此结构修改命令(例如 CREATE TABLE 或者 DROP TABLE)不工作。

我的工作连接字符串是:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=workbook.xls;Mode=ReadWrite;Extended Properties=\"Excel 8.0;HDR=Yes;\";"

我也有同样的问题。只删除扩展属性 IMEX=1. 。那会解决你的问题。您的表格将在您的 Excel 文件中创建...

有几个问题:

  • 执行您的应用程序的用户(您?)是否有权写入该文件?
  • 文件是只读的吗?
  • 你的连接字符串是什么?

如果您使用 ASP,则需要添加 IUSER_* 用户,如下所示 这个例子.

  • 如何检查我的应用程序写入 Excel 文件的权限(我使用的是 Excel 2007)?
  • 该文件不是只读的,也不是受保护的(据我所知)。
  • 我的连接字符串是:

“提供者= Microsoft.jet.oledb.4.0;数据源= FIFA_NG_DB.XLS; mode = readwrite; extended属性= 'excel 8.0; excel 8.0; hdr = yes; imex; imex = 1 “”

进一步迈克尔·哈伦的回答。如果此代码在 ASP.NET 应用程序中运行(在 IIS 应用程序池中指定),则您需要向 XLS 文件授予修改权限的帐户可能是 NETWORK SERVICE。要准确找出您的代码运行的帐户,您可以执行以下简单操作:

Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);

我在 ASP.NET 下运行,遇到“无法修改设计...”和“无法定位 ISAM...”错误消息。

我发现我需要:

A) 使用以下连接字符串:

Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite;Extended Properties='Excel 8.0;HDR=Yes;';Data Source=" + {path to file};

注意我也遇到了问题 IMEX=1 并与 ReadOnly=false 连接字符串中的属性。

) 授予每个人对正在写入文件的文件夹的完全权限。通常,ASP.NET 在 NETWORK SERVICE 帐户下运行,并且该帐户已经具有权限。但是,OleDb 代码是非托管的,因此它必须在其他安全上下文下运行。(我目前懒得弄清楚是哪个帐户,所以我就使用了 EVERYONE。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top