我想把整理好的datatable数据更新,想用SqlDataAdapter.Update()方法去修改数据库,提示已经修改,但数据库中没有任何更新,代码如下,大家帮我看盾到底是哪里错了。
using (SqlConnection con = this.GetConnection()) {
SqlCommand comm = con.CreateCommand();
comm.CommandType = CommandType.Text;
comm.CommandText = string.Format("SELECT * FROM {0} where 1=0", table.TableName);
SqlDataAdapter adapter = new SqlDataAdapter(comm);
adapter.SelectCommand = comm;
adapter.UpdateBatchSize = table.Rows.Count;
adapter.SelectCommand.Transaction = con.BeginTransaction();
try {
table.AcceptChanges();
foreach (DataRow row in table.Rows) {
row.SetModified();
}
SqlCommandBuilder commandBulider = new SqlCommandBuilder(adapter);
int a = adapter.Update(table);
table.AcceptChanges();
adapter.SelectCommand.Transaction.Commit();
return a;
} catch (Exception ex) {
if (adapter.SelectCommand != null && adapter.SelectCommand.Transaction != null) {
adapter.SelectCommand.Transaction.Rollback();
}
return -1;
}
}
我在SqlCommandBuilder commandBulider = new SqlCommandBuilder(adapter);后面加上 adapter.UpdateCommand = commandBulider.GetUpdateCommand();也还是一样,更新不了
追答自动生成的 UpdateCommand 要求可知的主键,此主键需要在代码上明确指定,无主键不能生成正确的 where 子句
追问传入table之前,就以经把主键设置了
追答你可以建立调试,查看 UpdateCommand 是否正确,参考以下文档确认你的用法是否正确。
http://msdn.microsoft.com/zh-cn/library/33y2221y.aspx
c# adapter.Update无法将数据更新进数据库
c# adapter.Update无法将数据更新进数据库 你的datagridview绑定的数据源需要实现了添加,删除,编辑相应的SQL语句才行。如果只用了DataSet绑定,而没有通过数据适配器绑定就无法自动实现,必须手动做。要注意SQL Server和Access的T-SQL语法是有不同的,要分情况。
在dataGridView修改不了数据 用sqlcommandBulider来操作数据库的
1,SqlDataAdapter 关联的数据表是否有关键字,这个是许多人最容易忽略的.2, 你的DataGridView 的DataSource 如果是 DataSet,那么在调用 sqlDataAdapter.Update(...)之前,不要使用AcceptChanges()方法.因为SqlDataAdapter.Update()方法,根据你数据集中资料行的RowState来更新数据,如果在更新之前使用了DataSet的Ac...
SqlDataAdapter提示
SqlDataAdapter的UpdateCommand工作原理是这样的:当你调用SqlDataAdapter的Update()方法时,它会对DataSet中的每一行进行检查。如果某一行的数据已经被修改,那么它就会执行预先设置好的UpdateCommand。这意味着,如果没有数据被改动,UpdateCommand是不会被执行的,这在节省资源和防止无谓操作方面非常有效。总结来...
SqlCommand和SqlDataAdapter有什么区别
1.离线--通过DataSet,然后离线增,删,改,最后通过SqlDataAdapter解 析到数据库中 2.直接对数据库操作SqlCommand (Update,Insert,Delete)SqlCommand就是是命令了,可以用它来执行SQL命令 SqlDataAdapter就是数据适配器了,它是用于在数据源和数据集之间通讯的一组对象 SqlCommand对应DateReader SqlDataAdapter对...
DataAdapter的Update方法的用法
调用 DataAdapter 的 Update 方法可以将 DataSet 中的更改解析回数据源。 与 Fill 方法类似,Update 方法将 DataSet 的实例和可选的 DataTable 对象或 DataTable 名称用作参数。 DataSet 实例是包含已做的更改的 DataSet,DataTable 标识从其中检索这些更改的表。 如果未指定 DataTable,则使用 DataSet ...
...对象的update方法,更新DataSet中修改的数据,产生的报错。
字符串输入不对,看看是不是输入的问题,比如中英文输入法下,用了中文的逗号和括号
datagridview更新数据库(SqlDataAdapter.update()的用法
DATABASE=pubs");SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM sales",conn);SqlCommandBuilder cmdbuilder = new SqlCommandBuilder(adapter);DataSet ds=new DataSet();adapter.Fill(ds);adapter.UpdateCommand = cmdbuilder.GetUpdateCommand();adapter.Update(ds,ds.Table[0].TableName);
关于DataAdapt的一点疑问
SqlDataAdapter 的作用类似于一个中介角色,他能够帮我们从数据库把数据填充到 DataSet, 以及将我们对DataSet的修改(包括增删改)保存回数据库。所以他包含四个命令对象 分别对应增删改查,前面的语句只是设置好这些语句,让他知道在需要的时候怎么去做,而并没有真正执行。这个例子里面它根据需要,只设置...
ado.net使用dataadapter.update更新时必须设置主键?
Update()实际上是通过CommandBuilder动态生成sql语句,然后才进行的数据库操作。但如果你在一开始创建DataAdapter时的那个sql语句没有包含有主键的列的话,那CommandBuilder将不会发生作用 使用SqlCommandBuilder ,表主键设定必须
dataset 修改数据库的一个数值。C#
要修改数据库的值就要有update语句 或者封装在ds中的updatecommand 你拼接一个update语句更新不就完了 像你那么改,如果实现的话也只不过改变了用adapter提取出来的数据库结果集的副本,对原始数据没有影响