利用SqlDataAdapter更新数据表
利用SqlDataAdapter更新数据表可以对一张表进行多个操作后,一次更新到数据库中。 代码如下: SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectString"].ConnectionString); string str = "select * from stu";//表必须要有主键 conn.Open(); SqlCommand cmd = new SqlCommand(str, conn); SqlDataAdapter Adapter = new SqlDataAdapter(); Adapter.SelectCommand = cmd; // DataSet DS = new DataSet(); Adapter.Fill(DS, "table"); //得到数据集 SqlCommandBuilder Mybuilder = new SqlCommandBuilder(Adapter); //通过对SqlDataAdatper自动生成更新物理表的操作(microsoft的东西),不可少。这里参数必须用selectcommand对 象。 /*Adapter.DeleteCommand = Mybuilder.GetDeleteCommand(); Adapter.UpdateCommand = Mybuilder.GetUpdateCommand(); Adapter.InsertCommand = Mybuilder.GetInsertCommand();*///这3句话在这里可以没有。 string[] addNew ={"5","abc","123","H@H","123123123"}; DataTable DT = DS.Tables["table"]; DT.Rows.Add(addNew);//对数据集进行修改添加等操作。 Adapter.Update(DS, "table"); //注意这里,"table"必须是DataSet中的内存表,而不是实际数据库中的物理表。否则会出现:无法找到 TableMapping['Table'] 或 DataTable“Table”的错误。 conn.Close(); ============= 注意:SqlCommandBuilder会根据“SqlCommandBuilder Mybuilder = new SqlCommandBuilder(Adapter)”里的 SqlDataAdapter 类型的Adapter参数自动往物理表里写东西,往哪个表写,就是根据这里来的。所以要操作的dataset与这里的SqlDataAdapter之间的关系就是:两者必须是同一张表。
来源:亦有软件