我是用这个方法来访问EXCEL的。
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties='Excel 8.0;MAXSCANROWS=1'";
string exSql = "SELECT * FROM [" + sheetName + "$]";
OleDbConnection conn = new OleDbConnection(connStr);
OleDbDataAdapter adp = new OleDbDataAdapter(exSql,conn); try
{
adp.Fill(data,sheetName);
conn.Close();
adp.Dispose();
}
catch(Exception e)
{
throw e;
}
finally
{
conn.Close();
adp.Dispose();
}
但由于另一个程序要打开EXCEL并更新它中表中的数据。
报以下错误:MICROSOFT JET数据引擎打不开文件。它已经被别的用户以独占方式打开,或没有查看数据的权限。
要求一边打开EXCEL修改其表值一边用程序读EXCEL数据。

解决方案 »

  1.   

    CSDN中的高手都在忙吗?怎么没人来帮忙,是我的问题难还是高手都放假啊。
      

  2.   

    再读取时必须要关闭excel,原理和SQL差不多,在修改表时的一瞬间表是被锁定的,事务处理完成后,解锁,若楼主只想导数据不妨建个临时表,先将Excel的内容导入临时表,在匹配操作
      

  3.   

    EXCEL 表用户 设置个其他的嘛 试下
      

  4.   

    读excel的时候,必须关闭excel软件,这和access是一样的.
      

  5.   

    我不解啊。为什么别人能做到呢?寄怪。我试过共享那个EXCEL,但不能只动保存,有那里能提供EXCEL每隔一些时间就自动保存EXCEL的程序呢
      

  6.   

    楼上的兄弟的办法不可以行,因为路透程序要一直打开EXCEL的。可有别的办法
      

  7.   

    我做的没问题啊,你想多了吧,我用的是pubs数据库里面的jobs表,直接导出的excel,然后访问他,放到ds里面。
    测试的时候我也把这个excel文件打开了。
    private void button1_Click(object sender, System.EventArgs e)
    {
    OleDbConnection ole = new OleDbConnection();
    ole.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"C:\Documents and Settings\Administrator\桌面\新建 Microsoft Excel 工作表.xls" + ";Extended Properties=Excel 8.0;Persist Security Info=False";
    OleDbDataAdapter oa = new OleDbDataAdapter("select * from jobs",ole);
    DataSet ds = new DataSet();
    try
    {
    oa.Fill(ds);
    dataGrid1.DataSource = ds.Tables[0];
    }
    catch(OleDbException ex)
    {
    MessageBox.Show(ex.Message);
    }
    }
      

  8.   

    楼上的的办法不行啊。当那个EXCEL在改变同时程序又访问EXCEL时就报独占的错了。
      

  9.   

    我的看法:
    一般的做法都是为了同时读写冲突先找到该process,kill掉,然后读了再打开写。这种类似于数据库的锁机制。
    因为现在数据访问做成长连接并不符合要求,所以包括ADO.NET等在内的都设计成离线式,楼主也可以同样将数据读取到中间层然后更改/读取,最后统一提交到excel,这样便于处理小量的并发。如果并发量较大,你的数据存在excel里就不太合适了,需要存到DB或XML中。
      

  10.   

    考虑zeusvenus(清柳)(C#/ASP.NET)的办法吧!
      

  11.   

    zeusvenus(清柳)兄可能你有些误解我意思了,或者我讲不清楚。是这样的,路透不更改EXCEL的数据,并改变的频率好快。我现在是的要求是读这个EXCEL的值,传入SQL中,并非把SQL的值传到EXCEL中。
      

  12.   

    我测试过,绝对可以滴,还有,你为什么要用独占的方式打开呢?不用独占的方式打开一样可以修改,保存,就是保存的瞬间用了下排它锁,其他都支持多个访问滴啊,excel在这里当database用,你想想ADO里面的锁是怎么控制数据库的。
      

  13.   

    如果按你这样说,一个打开别的进程就不用再用了,oledb还没烂到这个地步吧,Access也不用再用了。
      

  14.   

    兄弟,你可以试下,边更改EXCEL一边用程序来读取数据吧。当修改数据与读取数据同事进行就会报错了。