利用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之间的关系就是:两者必须是同一张表。