2008-09-12 144 views
8

有谁知道如何通过OLEDB在C#中写入excel文件(.xls)吗?我做了以下内容:用OLEDB写入excel文件

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

,但我得到一个OleDbException抛出与消息:

“无法修改表 ‘测试$’设计它是一个只读的 数据库。”

我的连接似乎很好,我可以选择的数据不错,但我似乎无法将数据插入到Excel文件,没有人知道我是怎么读通过OLEDB Excel文件/写访问?

+0

工作簿是否已经有一个名为test $的工作表? – Kearns 2008-10-07 18:53:57

回答

8

您需要添加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\"; 
+7

不太正确 - 使用ReadOnly属性会导致错误“System.Data.OleDb.OleDbException:找不到可安装的ISAM”。正是IMEX = 0阻止文件被只读。对我来说(C#)的字符串是:@“Provider = Microsoft.Jet.OLEDB.4.0; Data Source = {0}; Mode = ReadWrite; Extended Properties =”“Excel 8.0; HDR = YES; MaxScanRows = 0; IMEX = 0 “”;“; – rohancragg 2010-10-04 15:20:33

1

几个问题:

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

如果您使用ASP,您需要添加IUSER_ *用户在this example

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

“供应商= Microsoft.Jet.OLEDB.4.0;数据源 = fifa_ng_db.xls;模式=读写;扩展 属性= \” Excel中 8.0,HDR =是; IMEX = 1 \ “”

+0

通过右键单击它并点击安全或权限选项卡来检查权限。 Excel文件在连接时是否关闭? – 2008-09-13 03:28:30

+0

您应该尝试使用IMEX = 0 – rohancragg 2010-10-04 15:23:42

0

除了迈克尔哈伦的回答。如果此代码在ASP.NET应用程序中运行(它在IIS应用程序池中指定),则您需要授予对XLS文件“修改”权限的帐户可能为NETWORK SERVICE。要搞清楚占你的代码作为运行,你可以做一个简单:

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

我也一直在寻找和答案,但Zorantula的解决方案并没有为我工作。 我找到了解决方案http://www.cnblogs.com/zwwon/archive/2009/01/09/1372262.html

我删除了ReadOnly=false参数和IMEX=1扩展属性。

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

我的工作连接字符串是:

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

我ASP.NET下运行,并且遇到这两种“不能修改设计...”和“无法找到的ISAM ...”错误消息。

我发现我需要:

一个)使用下面的连接字符串:

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

注意我也曾经有过的问题与IMEX=1和与连接字符串中的ReadOnly=false属性。

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

2

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