ADO.NET 学习笔记(十三) DataSet的更新

之前的操作都是将数据填充到DataSet中,然后读DataSet,接下来我们要讨论如何修改DataSet。

步骤一

private void btnDataSetUpdate_Click(object sender, EventArgs e)

{

  DataSet myDateSet = new DataSet();

  string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;

  using (SqlConnection conn = new SqlConnection(connStr))

  {

    conn.Open();

    using (SqlCommand cmd = conn.CreateCommand())

    {

      cmd.CommandText = "select * From T_Person";

      SqlDataAdapter myAdapter = new SqlDataAdapter(cmd);

      myAdapter.Fill(myDateSet);

      DataTable myDataTable = myDateSet.Tables[0];

      DataRow myDataRow = myDataTable.Rows[0];

      myDataRow["FName"] = "Tom";

    }

  }

}

//更新行:row[""]=""
//删除行:datatable.Rows.Remove()
//新增行:datatable.NewRow()
//仅仅如上写法是不够的,DataSet是个离线数据集,放在内存中的。即上面改的是内存中的FName,只是本地的数据,而不是数据库中的值。接下来需要将修改同步到服务器。

步骤二、将修改提交到服务器
myAdapter.Update(myDateSet);//这里有很多的可选重载函数,可以提交整个DataSet,DataTable或者若干个DataRow,需要为SqlDataAdapter提供Command语句
//到这里依然还是没有完成,错误提示:当传递具有已修改行的DataRow集合时,更新要求有效的UpdateCommand。

步骤三、
关于myAdapter有多个属性
例如myAdapter.UpdateCommand;myAdapter.SelectCommand;myAdapter.DeleteCommand;myAdapter.InsertCommand。
//程序员可以自定义Command语句,如下
//myAdapter.InsertCommand = conn.CreateCommand(); //myAdapter.InsertCommand.CommandText = "";
//myAdapter.DeleteCommand = conn.CreateCommand(); //myAdapter.DeleteCommand.CommandText = "";
//myAdapter.SelectCommand = conn.CreateCommand(); //myAdapter.SelectCommand.CommandText = "";
//以上语句定义了如何修改以及修改哪些内容,接下来只要将已经完成的修改提交到服务器即可。
//myAdapter.Update(myDateSet);

//以上过程和步骤并不需要程序员亲自定义,ADO.Net提供了现成的方法可以自动生成SQL语句。
SqlCommandBuilder mySQLCommandBuilder=new SqlCommandBuilder(myAdapter);//实际上不需要定义变量,这里为了便于调试,定义一个变量。

注意:使用SqlCommandBuilder效率非常低!且SqlCommandBuilder要求表必须有主键。

你可能感兴趣的:(.net)