C# 使用DataAdapter对象的update方法,更新DataSet中修改的数据,产生的报错。

代码: private void Form1_Load(object sender, EventArgs e)//填充数据 { conn = new SqlConnection("server=woo;database=db_15;uid=sa;pwd=1234"); SqlCommand cmd = new SqlCommand("select * from tb_command",conn); sda = new SqlDataAdapter(); sda.SelectCommand = cmd; ds = new DataSet(); sda.Fill(ds, "cs"); dataGridView1.DataSource = ds.Tables[0]; } private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { //将数据读入Textbox修改 textBox1.Text = dataGridView1.SelectedCells[0].Value.ToString(); textBox2.Text = dataGridView1.SelectedCells[1].Value.ToString(); textBox3.Text = dataGridView1.SelectedCells[2].Value.ToString(); textBox4.Text = dataGridView1.SelectedCells[3].Value.ToString(); textBox5.Text = dataGridView1.SelectedCells[4].Value.ToString(); } private void button1_Click(object sender, EventArgs e) //更新数据 { DataTable dt = ds.Tables["cs"]; sda.FillSchema(dt, SchemaType.Mapped); DataRow dr = dt.Rows.Find(label1.Text); dr["姓名"] = label2.Text.Trim(); dr["性别"] = label3.Text.Trim(); dr["年龄"] = label4.Text.Trim(); dr["奖金"] = label5.Text.Trim(); SqlCommandBuilder cmdbuilder = new SqlCommandBuilder(sda); sda.Update(dt); }
错误提示见图片,请高手指点,谢谢!

字符串输入不对,看看是不是输入的问题,比如中英文输入法下,用了中文的逗号和括号追问

都是对的,VS没有录入错误的提示!

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-24
报错的行修改为:
DataRow dr = dt.Rows.Find(Convert.ToInt32(label1.Text));
试试?追问

谢谢帮助,按你给的代码,还是同样的显示!

注:以上代码是一个教程上的例子,写的一模一样(数据库用的也是案例带的数据库),我写的就是过不了!

第2个回答  2013-06-24
没用过Find函数,但是既然是查找主键值,那么会不会是因为你的主键是int值但是传入的是string或是ds.Tables["cs"]中没有包括主键的原因造成的呢追问

谢谢回复,如果是这个原因要怎么修改?

注:以上代码是一个教程上的例子,写的一模一样(数据库用的也是案例带的数据库),我写的就是过不了!

追答

数据库中编号的那一列是否设置为主键了。还有dataset 如果使用vs工具设置的话,看看编号那一列是否是主键。

追问

dataset编号设定为主键怎么设定?

第3个回答  2013-06-24
(label1.Text)对应哪个界面元素?值是主键吗?仅仅看你上面的图片的话,个人觉得应该是“编号”对应的那个textbox的值。追问

label1.Text对应的是编号,在数据库中是主键!但没有在VS中设定主键。

追答

如果你对update不是很熟悉,你还是直接用sql语句好了,或者有sqlhelper之类的辅助一下。

C# 使用DataAdapter对象的update方法,更新DataSet中修改的数据,产生的...
字符串输入不对,看看是不是输入的问题,比如中英文输入法下,用了中文的逗号和括号

DataAdapter的Update方法的用法
DataSet 中的第一个 DataTable。当调用 Update 方法时,DataAdapter 会分析已做的更改并执行相应的命令(INSERT、UPDATE 或 DELETE)。当 DataAdapter 遇到对 DataRow 所做的更改时,它将使用InsertCommand、UpdateCommand 或 DeleteCommand 来处理该更改。这样,您就可以通过在设计时指定命令语法并在可能时...

c# datagridview转换为access报错,违反并发性: UpdateCommand 影响了...
tableadapter生成的更新代码会对原值加条件来判断。update table set f1=newvalue where f1=oldvalue,如果返回rowcount为0 就会弹出此错误消息。如果你从数据库取得数据之后,该数据被其他地方更新,你再去更新就会出现此问题。另外,如果你更新了数据库里面的数据,而dataset在更新之后没有做AcceptChange,那...

C# SqlDataAdapter.Update的用法
public DataSet GetData(string selecttext, SqlParameter[] parmes, string keyset, string tablename, Boolean g){ try { connection = new SqlConnection(connectionstring);dataadapter = new SqlDataAdapter();dataadapter.SelectCommand = this.CommandFile(selecttext, parmes, g);SqlCommandBuilder SCB ...

C#ado.net 我有个dataset ds 里面的数据是两表连接的,我还有个datagridv...
你选择dw的某一行,就应该知道这一行的ID号,这一行的其他数据在textBox里面显示。那么,点击修改按钮,你就根据这个ID修改就行了.string sql=update biao set XX=textbox1.text and ... where ID=刚才得到的ID号码 。。。使用DataAdapter 的update方法。。。就这样就行了。

C#winform中,根据datagridview更新数据库
可以实现,也不难,结合Dataset.设置DataGridView的数据绑定.在修改删除完成后,调用DataAdapter的Update方法.

c#winform datagridview控件怎么在上面直接修改并且更新到sql数据库
this.datagridview1.datasource=dataset1.tables[0];\/\/绑定数据源,这样在界面修改单元格时,就可以更新到dataset dataAdapter dataadapter1=new dataAdapter(selectSQL,connnection);dataadapter1.update(dataset1.tables[0]);\/\/通过datatable修改数据库 ...

C#中DataGridview 删除 报错 未将对象引用设置到对象的实例_百度...
首先检查一下你的DataAdapter是否和Connection关联了。为了返回构造 INSERT、UPDATE 和 DELETE SQL 命令所需的元数据,OleDbCommandBuilder 必须执行 SelectCommand。 因此,必须额外经历一次到数据源的过程,这可能会降低性能。若要实现最佳性能,请显式指定命令而不是使用 OleDbCommandBuilder。也就是说你的...

C#的OleDbConnection如何一次执行多条Update语句
多行UPDATE是没有的,不过你可以这样做,可以不用写SQL语句,效果也好一些.你数据不是读出来了么,假设你放在数据表dt1中,然后将多行数据修改,修改完后,如果你用的是DataAdapter da 来查表,用,调用da.fill(dt),然后调用da.update()就可以实现整个表的多行修改写回到数据库了,这样会比较好一些....

dataadapter 的update方法改变数据库数据,那改变dataset表里的数据...
可以改变数据的 本来就是一个更新命令

相似回答