//SqlCommandBuilder 爲 SqlDataAdapter 提供 update、insert、delete 命令(自己利用select命令自動從數據庫元數據推斷) //select命令必須包含主鍵(SqlCommandBuilder 自己去推斷其他的三個命令) //推斷完成後,不需要對SqlDataAdapter的三個命令進行賦值(當然賦值也行,但是在賦值之前,顯示空異常) private void button8_Click(object sender, EventArgs e) { SqlConnection sqlCon = new SqlConnection(connectionString_da2017); //SqlDataAdapter 自動建立數據庫和DataSet的關係 SqlDataAdapter sqlDa = new SqlDataAdapter("select * from test ", sqlCon); SqlCommandBuilder sqlcb = new SqlCommandBuilder(sqlDa); DataSet sqlds = new DataSet(); sqlDa.Fill(sqlds); // 數據庫數據 DataTable databaseData = sqlds.Tables[0]; DataRow dr = databaseData.NewRow(); dr[0] = "0"; //自增的id 此句話無效 dr[1] = "1235"; dr[2] = "ABCg"; databaseData.Rows.Add(dr); //SqlCommandBuilder 爲 SqlDataAdapter 提供 update、insert、delete 命令(自己利用select命令自動從數據庫元數據推斷) //select 命令必須包含鍵列信息 //如果直接訪問sqlDa.InsertCommand.CommandText 則顯示空異常 //MessageBox.Show(sqlDa.InsertCommand.CommandText); //但是如果 手動給他賦值,又多次一舉(效果是相同的) //sqlDa.InsertCommand = sqlcb.GetInsertCommand(); sqlDa.Update(databaseData); //MessageBox.Show(sqlcb.GetDeleteCommand().CommandText); //MessageBox.Show(sqlcb.GetInsertCommand().CommandText); // MessageBox.Show(sqlcb.GetUpdateCommand().CommandText); //DELETE FROM [test] WHERE (([id] = @p1) AND ((@p2 = 1 AND [val1] IS NULL) OR ([val1] = @p3)) AND ((@p4 = 1 AND [val2] IS NULL) OR ([val2] = @p5))) //INSERT INTO [test] ([val1], [val2]) VALUES (@p1, @p2) //UPDATE [test] SET [val1] = @p1, [val2] = @p2 WHERE (([id] = @p3) AND ((@p4 = 1 AND [val1] IS NULL) OR ([val1] = @p5)) AND ((@p6 = 1 AND [val2] IS NULL) OR ([val2] = @p7))) }