最近看一个案例,关于如何向数据库传数据,颇有发现。 以前我的数据都是采用Sql代码用SqlCommand一条一条语句的传入数据库。 但是今天发现有更好的方法。 代码如下: SqlConnection cn=new SqlConnection(ConStr); DataSet DS=new DataSet(); SqlDataAdapter Sda=new SqlDataAdapter("Select * from Table1",cn); try { Sda.Fill(DS,"Table1"); MessageBox.Show(DS.Tables[0].Rows.Count.ToString()); } catch(Exception er) { MessageBox.Show(er.Message); } //DataSet DS2=DS.Clone(); //Sda.SelectCommand=new SqlCommand("Select * from Table1"); DataRow dr=DS.Tables[0].NewRow(); dr["F1"]=5; dr["F2"]=5; dr["F3"]=5; DS.Tables[0].Rows.Add(dr); dr=DS.Tables[0].NewRow(); dr["F1"]=6; dr["F2"]=6; dr["F3"]=6; DS.Tables[0].Rows.Add(dr); SqlCommandBuilder SCB=new SqlCommandBuilder(Sda); try { Sda.Update(DS,"Table1"); } catch(Exception er) { MessageBox.Show(er.Message); } Sda.Dispose(); cn.Close(); 数据库用的是SQL2000,先在数据库中建立Table1的临时表,建立字段MainID,F1,F2,F3 初始数据如下 MainID F1 F2 F3 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 注意到,我先把数据从数据库中读出来,赋值到DS中 结果显然为4行 然后我在该数据集DS中添加2个同构行 这是注意了,我没有做任何的Insert相关语句 打算直接采用SqlDataAdapter.Update(DataSet,TableScr)方法 但是注意,直接用是不行的,会提示缺少Insert命令的关联 这是可以用了如黄色高亮标记的语句 SqlCommandBuilder SCB=new SqlCommandBuilder(Sda); 这是所有关联就都建立好了,全自动。奇妙,诡异阿 这样就方便多了。 恩,更多的相关功能正在研究中。 ============================================================= 使用SqlCommandBuilder与SqlDataAdapter结合使用,可以方便地去数据库进行更新。只要指定Select 语句就可以自动生成Insert,update,delete语句,但要注意一点。Select 语句中返回的列要包括主键列,否则将无法产生Update,和Delete语句。相应的操作将无法执行 public static DataSet SelectSqlSrvRows(string myConnection, string mySelectQuery, string myTableName) { SqlConnection myConn = new SqlConnection(myConnection); SqlDataAdapter myDataAdapter = new SqlDataAdapter(); myDataAdapter.SelectCommand = new SqlCommand(mySelectQuery, myConn); SqlCommandBuilder cb = new SqlCommandBuilder(myDataAdapter); myConn.Open(); DataSet ds = new DataSet(); myDataAdapter.Fill(ds, myTableName); //code to modify data in DataSet here //Without the SqlCommandBuilder this line would fail myDataAdapter.Update(ds, myTableName); myConn.Close(); return ds; } |
|