请教大哥大姐,小弟有个问题不知怎么解决,请帮帮忙!现在要将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: 操作必须使用一个可更新的查询。"很奇怪,当我把这个代码做为一个单独模块运行的时候可以成功保存,但是一旦放到项目当中的话,就报这个错了. 小弟实在不解,请高手指教!
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: 操作必须使用一个可更新的查询。"很奇怪,当我把这个代码做为一个单独模块运行的时候可以成功保存,但是一旦放到项目当中的话,就报这个错了. 小弟实在不解,请高手指教!
============应该是没有写入excel的权限.
给该excel文件aspnet用户(iis5)或network service(iis6)用户写入权限
与只读属性无关,关键是权限问题;
在2003的系统是在目录属性--安全里面添加相关aspnet中的写权限
xp系统一般不用设置,如果要设置的话先从控制面板中调出权限菜单