【新人求救】更新的时候 当传递具有新行的 DataRow 集合时,Update 要求有效的 InsertComman 数据库datasetcsdndatatable c#c# 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先 理清思路。 新行的 DataRow - 执行插入操作;而不是执行update操作,应为新增数据再数据库中 不存在,怎么个更新。 大神,能不能说的清楚一点,我是刚看到这个部分的我想用这两句更新datatable里的内容 ds.Tables[0].Rows[num - 1]["lname"] = name; ds.Tables[0].Rows[num - 1]["lpassword"] = password;然后再更新到数据库里 改成SqlDataAdapter adapter = new SqlDataAdapter(sql,conn);adapter.fill(ds,"table1");然后再update,因为之前你个ds赋值,但是这个ds和dataadapter没什么关联,adapter认为这个ds之前是空的,后来新增了行,所以要执行insert语句。 像你手动创建dataadapter对象的话,最好顺便创建dataadapter对象的InsertCommand、UpdateCommand、DeleteCommand。这样就操作ds就可以,操作完,更具需要调用insert,update,delete就行了。 你下面两句是干什么的?你到底是只要更新现有行,还是如果存在就更新,不存在就添加? ds.Tables[0].Rows[num - 1]["lname"] = name; ds.Tables[0].Rows[num - 1]["lpassword"] = password;数据表里有主键,也可以考虑使用SqlCommandBuilder,这样定义好SELECT命令语句,可以通过它的GetUpdateCommand()和GetInsertCommand()方法自动获取更新和插入命令,然后通过类似adapter.UpdateCommand = commandBuilder.GetUpdateCommand();的方法传给adapter。 以前回答别人更新DataGrideView时候写的代码,有部分是通过DataSet和Adapter更新的,供参考 public static DataSet getDataSet(string connStr, string sql, string name) { SqlConnection conn = null; DataSet ds = null; try { conn = new SqlConnection(connStr); ds = new DataSet(); conn.Open(); SqlDataAdapter cmd = new SqlDataAdapter(sql, conn); cmd.Fill(ds, name); } catch { } finally { if (conn != null) conn.Close(); } return ds; } public void UpdateDB() { try { DsCustomer = new DataSet(); DsCustomer = getDataSet(connstr, "select * from Customer", "Customer"); //DsCustomer = dbManage.getDataSet("select * from Customer", "Customer");//自定义的一个过程,返回DataSet SqlConnection conn = new SqlConnection(connstr); conn.Open(); SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Customer", conn); SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter); adapter.UpdateCommand = commandBuilder.GetUpdateCommand(); adapter.InsertCommand = commandBuilder.GetInsertCommand(); adapter.Fill(DsCustomer); BsCustomer = new BindingSource(); BsCustomer.DataSource = DsCustomer.Tables["Customer"]; System.Diagnostics.Debug.Print("DS1 Rows:" + DsCustomer.Tables[0].Rows.Count.ToString()); dataGridView1.DataSource = BsCustomer;//这里把dataGridView1的DataSource指向BindingSource DataRowView drv = BsCustomer.AddNew() as DataRowView;//如果是添加新记录的话 drv.BeginEdit();//开始修改 drv["Name"] = "fish";//该行item属性为“fish” drv["type"] = "2";//该行item属性为“fish” drv.EndEdit(); //结束BindigSource编辑 BsCustomer.EndEdit(); //获取修改过的记录来只更新有改变的数据 //DsCustomer.GetChanges(); //System.Diagnostics.Debug.Print("DS1 Rows:" + DsCustomer.Tables[0].Rows.Count.ToString()); //System.Diagnostics.Debug.Print("Changed: " + DsCustomer.HasChanges().ToString()); adapter.Update(DsCustomer, "Customer"); //真正更新到数据库 //DsCustomer.AcceptChanges(); } catch (Exception) { throw; } } 求助 谁有个简单的socket通讯例子。发给我学习下。 C#中 ShockwaveFlash控件 的背景怎样才能透明??请高手指教 如何得到快捷方式的目标路径? c#处理图像 动态打开窗口问题 VB6 如何设置环境变量指向 C# 的 DLL 的目录或 DLL 文件本身 asp.net PasswordRecovery控件问题 愁死了 新手的问题! IDE菜鸟问题 C# 二进制下载问题 值类型、引用类型与ref关键字 有句话没看懂
我想用这两句更新datatable里的内容
ds.Tables[0].Rows[num - 1]["lname"] = name;
ds.Tables[0].Rows[num - 1]["lpassword"] = password;
然后再更新到数据库里
SqlDataAdapter adapter = new SqlDataAdapter(sql,conn);
adapter.fill(ds,"table1");
然后再update,因为之前你个ds赋值,但是这个ds和dataadapter没什么关联,adapter认为这个ds之前是空的,后来新增了行,所以要执行insert语句。
这样就操作ds就可以,操作完,更具需要调用insert,update,delete就行了。
ds.Tables[0].Rows[num - 1]["lpassword"] = password;数据表里有主键,也可以考虑使用SqlCommandBuilder,这样定义好SELECT命令语句,可以通过它的GetUpdateCommand()和GetInsertCommand()方法自动获取更新和插入命令,然后通过类似adapter.UpdateCommand = commandBuilder.GetUpdateCommand();的方法传给adapter。
{
SqlConnection conn = null;
DataSet ds = null;
try
{
conn = new SqlConnection(connStr);
ds = new DataSet();
conn.Open(); SqlDataAdapter cmd = new SqlDataAdapter(sql, conn);
cmd.Fill(ds, name);
}
catch
{
}
finally
{
if (conn != null)
conn.Close();
}
return ds;
}
public void UpdateDB()
{
try {
DsCustomer = new DataSet();
DsCustomer = getDataSet(connstr, "select * from Customer", "Customer");
//DsCustomer = dbManage.getDataSet("select * from Customer", "Customer");//自定义的一个过程,返回DataSet
SqlConnection conn = new SqlConnection(connstr);
conn.Open(); SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Customer", conn);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter);
adapter.UpdateCommand = commandBuilder.GetUpdateCommand();
adapter.InsertCommand = commandBuilder.GetInsertCommand();
adapter.Fill(DsCustomer);
BsCustomer = new BindingSource();
BsCustomer.DataSource = DsCustomer.Tables["Customer"];
System.Diagnostics.Debug.Print("DS1 Rows:" + DsCustomer.Tables[0].Rows.Count.ToString());
dataGridView1.DataSource = BsCustomer;//这里把dataGridView1的DataSource指向BindingSource DataRowView drv = BsCustomer.AddNew() as DataRowView;//如果是添加新记录的话
drv.BeginEdit();//开始修改
drv["Name"] = "fish";//该行item属性为“fish”
drv["type"] = "2";//该行item属性为“fish”
drv.EndEdit();
//结束BindigSource编辑
BsCustomer.EndEdit();
//获取修改过的记录来只更新有改变的数据
//DsCustomer.GetChanges();
//System.Diagnostics.Debug.Print("DS1 Rows:" + DsCustomer.Tables[0].Rows.Count.ToString());
//System.Diagnostics.Debug.Print("Changed: " + DsCustomer.HasChanges().ToString()); adapter.Update(DsCustomer, "Customer");
//真正更新到数据库
//DsCustomer.AcceptChanges();
} catch (Exception) {
throw;
}
}