ado.net里的dataset可以做成离线数据库,在离线状态下改变表里的内容,然后统一更新数据表..可是不知道怎么弄 错误是什么?数据库中有主键和自动序号吗?还有,建议不要直接使用Update方法,在更新时,你需要指明更新的先后顺序。要使用更新标识. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看如下的例子:首先取得数据,放到DataGrid里System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("server=localhost;database=northWind;uid=sa;password=110");conn.Open();System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter("select * from student",conn);dt = new System.Data.DataSet();da.Fill(dt,"student");然后绑定数据集和DataGridDataGrid.SetDataBinding(dt,"student");如果需要,可以绑定TextBox来作录入,而用DataGrid显示this.textBox16.DataBindings.Add("Text",dt,"student.stuno");然后进行数据的操作如:增加:this.BindingContext[dt,"student"].AddNew();删除:this.BindingContext[dt,"student"].RemoveAt(this.BindingContext[dt,"student"].Position);最后把结果写回数据库:// sqlInsertCommand1// this.sqlInsertCommand1.CommandText = "INSERT INTO student(stuno, name) VALUES (@stuno, @name)"; this.sqlInsertCommand1.Connection = this.conn;this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@stuno", System.Data.SqlDbType.VarChar, 4, "stuno"));this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 50, "name"));// // sqlUpdateCommand1// this.sqlUpdateCommand1.CommandText = "UPDATE student SET stuno = @stuno, name = @name WHERE (stuno = @Original_stuno)";this.sqlUpdateCommand1.Connection = this.conn;this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@stuno", System.Data.SqlDbType.VarChar, 4, "stuno"));this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 50, "name"));this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_stuno", System.Data.SqlDbType.VarChar, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "stuno", System.Data.DataRowVersion.Original, null)); // sqlDeleteCommand1// this.sqlDeleteCommand1.CommandText = "DELETE FROM student WHERE (stuno = @Original_stuno)";this.sqlDeleteCommand1.Connection = this.conn;this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_stuno", System.Data.SqlDbType.VarChar, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "stuno", System.Data.DataRowVersion.Original, null)); this.sqlDa.DeleteCommand = this.sqlDeleteCommand1;this.sqlDa.InsertCommand = this.sqlInsertCommand1;this.sqlDa.UpdateCommand = this.sqlUpdateCommand1;try{ sqlDa.Update(dt.GetChanges,"student"); return true;}catch(System.Data.SqlClient.SqlException ex){ return false;} finally{ conn.Close();} 原因是你的adapter没有设置insertcommand、updatecommand、deletecommand对象。请用commandbuilder对adapter进行一下生成insertcommand、updatecommand、deletecommand对象后再调用adapter.update方法以下处理后,即可达到效果 adapter应设置insertcommand、updatecommand、deletecommand对象。因为dataset中每个行都维护着一个状态,提示这一行是insert,update,delete。根据这些状态,adapter调用对应的command去更新数据库。 this.sqlUpdateCommand1.CommandText = "UPDATE student SET stuno = @stuno, name = @name WHERE (stuno = @Original_stuno)";updatecommand一定一要设置参数吗 是不是 只有设置了参数的字段才允许修改 private void button2_Click(object sender, System.EventArgs e) {SqlCommandBuilder cmicCb=new SqlCommandBuilder(adapter);//加上这一句 adapter.Update( dataSet1,"mscatalog"); } SqlAdapter应设置updatecommand语句 是用Interop.WMPLib.dll和AxInterop.WMPLib.dll出现问题 console.writelin()问题简单哦! 如何查看另一程序发送的参数? 如何用label制作像标题栏一样可以移动整个窗体,,,, 我想编辑一个已经预编译的站点,不知道可以不可以? OracleDataReader的问题 如何合理使用PANEL 关于swf在页面缓存 oauth用户登陆 C# 在enumjobs中获得JOB_INFO_1类型数组中的值 在WINFORM里如何打印DATAGRID数据网格?哪位能给个详细的例子? 问一个关于dataGrid的一个细节问题。
首先取得数据,放到DataGrid里System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("server=localhost;database=northWind;uid=sa;password=110");
conn.Open();
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter("select * from student",conn);
dt = new System.Data.DataSet();
da.Fill(dt,"student");然后绑定数据集和DataGrid
DataGrid.SetDataBinding(dt,"student");
如果需要,可以绑定TextBox来作录入,而用DataGrid显示
this.textBox16.DataBindings.Add("Text",dt,"student.stuno");
然后进行数据的操作如:
增加:
this.BindingContext[dt,"student"].AddNew();
删除:
this.BindingContext[dt,"student"].RemoveAt(this.BindingContext[dt,"student"].Position);
最后把结果写回数据库:
// sqlInsertCommand1
//
this.sqlInsertCommand1.CommandText = "INSERT INTO student(stuno, name) VALUES (@stuno, @name)";
this.sqlInsertCommand1.Connection = this.conn;
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@stuno", System.Data.SqlDbType.VarChar, 4, "stuno"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 50, "name"));
//
// sqlUpdateCommand1
//
this.sqlUpdateCommand1.CommandText = "UPDATE student SET stuno = @stuno, name = @name WHERE (stuno = @Original_stuno)";
this.sqlUpdateCommand1.Connection = this.conn;
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@stuno", System.Data.SqlDbType.VarChar, 4, "stuno"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 50, "name"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_stuno", System.Data.SqlDbType.VarChar, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "stuno", System.Data.DataRowVersion.Original, null));
// sqlDeleteCommand1
//
this.sqlDeleteCommand1.CommandText = "DELETE FROM student WHERE (stuno = @Original_stuno)";
this.sqlDeleteCommand1.Connection = this.conn;
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_stuno", System.Data.SqlDbType.VarChar, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "stuno", System.Data.DataRowVersion.Original, null));
this.sqlDa.DeleteCommand = this.sqlDeleteCommand1;
this.sqlDa.InsertCommand = this.sqlInsertCommand1;
this.sqlDa.UpdateCommand = this.sqlUpdateCommand1;
try
{
sqlDa.Update(dt.GetChanges,"student");
return true;
}
catch(System.Data.SqlClient.SqlException ex)
{
return false;
}
finally
{
conn.Close();
}
请用commandbuilder对adapter进行一下生成insertcommand、updatecommand、deletecommand
对象后再调用
adapter.update方法
以下处理后,即可达到效果
updatecommand一定一要设置参数吗 是不是 只有设置了参数的字段才允许修改
{
SqlCommandBuilder cmicCb=new SqlCommandBuilder(adapter);//加上这一句
adapter.Update( dataSet1,"mscatalog");
}