日期:2014-05-19  浏览次数:20789 次

DataTable如何更新没有关键字的表,例如EXCEL中的表?
加载一个EXCEL的工作表到数据网格如下。表加载是动态的

dataAdapter   =   new   OleDbDataAdapter(@ "SELECT   *   FROM   [ "   +   tableName   +   "] ",   connection);
OleDbCommandBuilder   cmdBuilder   =   new   OleDbCommandBuilder(dataAdapter);
dataTable   =   new   DataTable();

dataAdapter.Fill(dataTable);
dataGrid.DataSource   =   null;
dataGrid.DataSource   =   dataTable;

但是dataTable修改后,如何更改到EXCEL

------解决方案--------------------
那就不能使用OleDbDataAdapter的update方法了。

只能自己写SQL语句,然后使用OleDbCommand来执行你的SQL语句来更新!!!
------解决方案--------------------
没有主键,SqlDataAdapter不能构造Update的sql语句,只能自己组sql语句,再用SqlCommand去执行。
------解决方案--------------------
动手写 UPDATE 语句
------解决方案--------------------
虽然没有主键,但是 Excel 中也要有一列 或者 几列能够标识每行数据是唯一的

UPDATE [Sheett1$] SET 列名1=?, 列名2=? WHERE 列名3=?
------解决方案--------------------
可以
看看duwamish
指定DataAdpater 的 updatecommand 例如
dataAdapter = new OleDbDataAdapter();
dataAdpater.UpDateCommand = new OleDataCommand( "update table set [id]=@id , .... " , conn );//access 没怎么用过,不太清楚sql语句中变量怎么写
dataAdpater.UpDateCommand.Paramers.Add( "@id " , ... , id //这里指映射到表的字段名);
dataTable = new DataTable();
DataRow dr = dataTable.NewRow();
dataTable.Rows.Add(dr);
dr.AcceptChange();//先接受改变
dr[ "id] = 1; //再修改
dataAdpater.UpDate(dataTable );