SqlCommandBuilder 为SqlDataAdapter 提供 update、insert、delete 命令(自己利用select命令自动从数据库元数据推断)

        //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)))

        }
原文地址:https://www.cnblogs.com/qqhfeng/p/14092299.html