请教大哥大姐,小弟有个问题不知怎么解决,请帮帮忙!现在要将DataGrid中的数据写入到Excel中
DataGrid中的数据是从该Excel文件中导入进来,然后我在DataGrid中对数据进行编辑后再保存回Excel中,我的代码如下:这是将DataGrid中的数据保存到Excel中的方法public void DSToExcel(string Path,DataSet oldds) //写入Excel,第一个参数是Excel文件所在的路径,第二个参数是修改后的数据,保存在DataSet中 { 
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source ="+Path+";Extended Properties=Excel 8.0" ;  OleDbConnection myConn = new OleDbConnection(strCon) ;  string strCom="SELECT * FROM [Sheet1$]";  myConn.Open ( ) ;  OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom, myConn ) ;  System.Data.OleDb.OleDbCommandBuilder builder=new OleDbCommandBuilder(myCommand);  //QuotePrefix和QuoteSuffix主要是对builder生成InsertComment命令时使用。  builder.QuotePrefix="["; //获取insert语句中保留字符(起始位置)  builder.QuoteSuffix="]"; //获取insert语句中保留字符(结束位置)  DataSet newds=new DataSet();  myCommand.Fill(newds ,"Table1") ;
for(int i=0;i<oldds.Tables[0].Rows.Count;i++)  {  DataRow nrow=newds.Tables["Table1"].NewRow();  for(int j=0;j<newds.Tables[0].Columns.Count;j++)  {  nrow[j]=oldds.Tables[0].Rows[i][j];  }  newds.Tables["Table1"].Rows.Add(nrow);  }   myCommand.Update(newds,"Table1"); myConn.Close(); 
             
}
这个方法在DataGrid1_UpdateCommand事件中触发
当我进行更新的时候,便会报错"异常详细信息: System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询。"很奇怪,当我把这个代码做为一个单独模块运行的时候可以成功保存,但是一旦放到项目当中的话,就报这个错了.  小弟实在不解,请高手指教!

解决方案 »

  1.   

    操作必须使用一个可更新的查询。
    ============应该是没有写入excel的权限.
    给该excel文件aspnet用户(iis5)或network service(iis6)用户写入权限
      

  2.   

    以前操作access数据库碰到过一次这样的错误是因为和服务器的文件格式有关,设置下access所在目录的everyone权限就可以了.你这个excel操作不知是否是同样的问题或者其他原因.
      

  3.   

    我在存放该Excel文件的文件上,在属性里面只读属性去不掉,不知怎么改,在哪里改权限呢?
      

  4.   

    我在存放该Excel文件的文件上,在属性里面只读属性去不掉,不知怎么改,在哪里改权限呢?
    与只读属性无关,关键是权限问题;
    在2003的系统是在目录属性--安全里面添加相关aspnet中的写权限
    xp系统一般不用设置,如果要设置的话先从控制面板中调出权限菜单
      

  5.   

    只读属性去不掉,是不是在使用中?权限在属性的安全选项卡中,如果没有这个选项卡,可能你的分区是fat32的,那么就不用考虑权限问题.