应用DataAdapter对象更新数据库中的数据

 
   
using System.Data.SqlClient;



namespace WindowsFormsApplication1

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        string strCon = "Server=localhost;User Id=sa;Pwd=;DataBase=my";//定义数据库连接字符串

        SqlConnection sqlcon;//声明数据库连接对象

        SqlDataAdapter sqlda;//声明数据库桥接器对象

        DataSet myds;//声明数据集对象

        private void Form1_Load_1(object sender, EventArgs e)

        {

            sqlcon = new SqlConnection(strCon);//实例化数据库连接对象

            sqlda = new SqlDataAdapter("select * from S", sqlcon);//实例化数据库桥接器对象

            myds = new DataSet();//实例化数据集

            sqlda.Fill(myds);//填充数据集

            dataGridView1.DataSource = myds.Tables[0];//对DataGridView控件进行数据绑定



        }

        //执行批量更新操作

        private void button1_Click_1(object sender, EventArgs e)

        {

            myds.Tables.Clear();//清空数据集

            sqlcon = new SqlConnection(strCon);//实例化数据库连接对象

            sqlda = new SqlDataAdapter("select * from S", sqlcon);//实例化数据库桥接器对象

            //给SqlDataAdapter的UpdateCommand属性指定执行更新操作的SQL语句

            sqlda.UpdateCommand = new SqlCommand("update S set Sex=@sex,Age=@age where SN=@sn", sqlcon);

            //添加参数并赋值

            sqlda.UpdateCommand.Parameters.Add("@sex", SqlDbType.Char, 20, "Sex");

            sqlda.UpdateCommand.Parameters.Add("@age", SqlDbType.Int, 9, "Age");

            SqlParameter prams_ID = sqlda.UpdateCommand.Parameters.Add("@sn", SqlDbType.VarChar);

            prams_ID.SourceColumn = "sn";//设置@sn参数的原始列

            prams_ID.SourceVersion = DataRowVersion.Original;//设置@sn参数的原始值

            sqlda.Fill(myds);//填充数据集

            //使用一个for循环更改数据集myds中的表中的值

            for (int i = 0; i < myds.Tables[0].Rows.Count; i++)

            {

                myds.Tables[0].Rows[i]["Sex"] = dataGridView1.Rows[i].Cells[2].Value.ToString();//cell[0]表示当前行的第一列

                myds.Tables[0].Rows[i]["Age"] = Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value);

            }

            //调用Update方法提交更新后的数据集myds,并同步更新数据库数据

              sqlda.Update(myds);//如果把这句注释掉仅会更新本地界面上的数据,但是不会更新数据库的内容的

            dataGridView1.DataSource = myds.Tables[0];//对DataGridView控件进行数据绑定



        }

    }

}
 
   

 


应用DataAdapter对象更新数据库中的数据
上面有一个
DataGridView控件
应用DataAdapter对象更新数据库中的数据

更新后注释详细:
using System.Data.SqlClient;



namespace WindowsFormsApplication1

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        string strCon = "Server=localhost;User Id=sa;Pwd=;DataBase=my";//定义数据库连接字符串

        SqlConnection sqlcon;//声明数据库连接对象

        SqlDataAdapter sqlda;//声明数据库桥接器对象

        DataSet myds;//声明数据集对象

        private void Form1_Load_1(object sender, EventArgs e)

        {

            sqlcon = new SqlConnection(strCon);//实例化数据库连接对象

            sqlda = new SqlDataAdapter("select * from S", sqlcon);//实例化数据库桥接器对象

            myds = new DataSet();//实例化数据集

            sqlda.Fill(myds);//填充数据集

            dataGridView1.DataSource = myds.Tables[0];//对DataGridView控件进行数据绑定

            //如果把这句注释掉就不会显示出数据

        }

        //执行批量更新操作

        private void button1_Click_1(object sender, EventArgs e)

        {

            myds.Tables.Clear();//清空数据集

            sqlcon = new SqlConnection(strCon);//实例化数据库连接对象

            sqlda = new SqlDataAdapter("select * from S", sqlcon);//实例化数据库桥接器对象

            //给SqlDataAdapter的UpdateCommand属性指定执行更新操作的SQL语句

            sqlda.UpdateCommand = new SqlCommand("update S set Sex=@sex,Age=@age,SN=@sn where SNo=@sno", sqlcon);//where SN=@sn 

            //set Sex=@sex,Age=@age,SN=@sn,这句的意思是修改数据库中这三列的值,如果其中少写一列,则这一列的值仅在界面上会改动,数据库中不会改动的



            //如果把这个where SN=@sn分离出来那么更新数据后界面上看上去没问题,都更新了,但是数据库是这样更新的,因为没有where语句

            //所以他会从第一行开始更新,每更新一项就会把所有的项都会更新成这个项的内容,如此下去当更新到最后一行时,他会把所有项的内容都会更新成最后一项的内容

            //添加参数并赋值

            sqlda.UpdateCommand.Parameters.Add("@sex", SqlDbType.Char, 20, "Sex"); //这儿声明变量@sex下同

            sqlda.UpdateCommand.Parameters.Add("@age", SqlDbType.Int, 9, "Age");

           //SqlParameter prams_ID = sqlda.UpdateCommand.Parameters.Add("@sn", SqlDbType.VarChar);

            //prams_ID.SourceColumn = "sn";//设置@id参数的原始列

            //prams_ID.SourceVersion = DataRowVersion.Original;//设置@id参数的原始值

             sqlda.UpdateCommand.Parameters.Add("@sn", SqlDbType.VarChar, 8, "SN"); 

             SqlParameter prams_ID = sqlda.UpdateCommand.Parameters.Add("@sno", SqlDbType.VarChar);

             prams_ID.SourceColumn = "sno";//设置@sno参数的原始列,

             sqlda.Fill(myds);//填充数据集

            //使用一个for循环更改数据集myds中的表中的值

            for (int i = 0; i < myds.Tables[0].Rows.Count; i++)

            {

                myds.Tables[0].Rows[i]["Sex"] = dataGridView1.Rows[i].Cells[2].Value.ToString();//cell[0]表示当前行的第一列

                myds.Tables[0].Rows[i]["Age"] = Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value);

                myds.Tables[0].Rows[i]["SN"] = dataGridView1.Rows[i].Cells[1].Value.ToString();

               

            }

            //如果把这个for循环注释掉,那么你在界面上改动的东西双击批量更新按钮后还是和原来的一样,界面上的内容和数据库的内容都不会变的

            

            //调用Update方法提交更新后的数据集myds,并同步更新数据库数据

             sqlda.Update(myds);//如果把这句注释掉仅会更新本地界面上的数据,但是不会更新数据库的内容的

            //上面声明了几个变量下面更新就更新那几列的内容,没有提及的列不会更新的

             dataGridView1.DataSource = myds.Tables[0];//对DataGridView控件进行数据绑定

            //如果把这句注释掉在界面上修改数据后,然后点击批量更新按钮,界面不会出现闪动地那一下,但是数据库可以更新的

        }

    }

}
 
   

 

 

 

你可能感兴趣的:(Adapter)