最近看一個(gè)案例,,關(guān)于如何向數(shù)據(jù)庫(kù)傳數(shù)據(jù),,頗有發(fā)現(xiàn),。 以前我的數(shù)據(jù)都是采用Sql代碼用SqlCommand一條一條語(yǔ)句的傳入數(shù)據(jù)庫(kù)。 但是今天發(fā)現(xiàn)有更好的方法,。 代碼如下: 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(); 數(shù)據(jù)庫(kù)用的是SQL2000,,先在數(shù)據(jù)庫(kù)中建立Table1的臨時(shí)表,建立字段MainID,F1,F2,F3 初始數(shù)據(jù)如下 MainID F1 F2 F3 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 注意到,,我先把數(shù)據(jù)從數(shù)據(jù)庫(kù)中讀出來(lái),,賦值到DS中 結(jié)果顯然為4行 然后我在該數(shù)據(jù)集DS中添加2個(gè)同構(gòu)行 這是注意了,我沒有做任何的Insert相關(guān)語(yǔ)句 打算直接采用SqlDataAdapter.Update(DataSet,,TableScr)方法 但是注意,,直接用是不行的,會(huì)提示缺少Insert命令的關(guān)聯(lián) 這是可以用了如黃色高亮標(biāo)記的語(yǔ)句 SqlCommandBuilder SCB=new SqlCommandBuilder(Sda); 這是所有關(guān)聯(lián)就都建立好了,,全自動(dòng),。奇妙,詭異阿 這樣就方便多了,。 恩,,更多的相關(guān)功能正在研究中。 ============================================================= 使用SqlCommandBuilder與SqlDataAdapter結(jié)合使用,,可以方便地去數(shù)據(jù)庫(kù)進(jìn)行更新,。只要指定Select 語(yǔ)句就可以自動(dòng)生成Insert,update,delete語(yǔ)句,,但要注意一點(diǎn),。Select 語(yǔ)句中返回的列要包括主鍵列,,否則將無(wú)法產(chǎn)生Update,和Delete語(yǔ)句。相應(yīng)的操作將無(wú)法執(zhí)行 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; } |
|
來(lái)自: 行走在理想邊緣 > 《數(shù)據(jù)庫(kù)》