3.案例学习:SQLDataAdapter完成对数据库的删除修改和插入

本实验目标是要求编写一个应用程序,利用 SQLDataAdapter 对象实现可以添加、修改、删除学生基本信息的功能。用户界面如图442所示:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

4-42 学生基本信息应用程序界面图

u 实验步骤(1):

VS.NET 2005 中新建一个名为示例2的基于 Windows 的项目。将默认窗体重命名为 form9 .cs

u 实验步骤(2):

从工具箱之中拖拽一个 dataGridView 控件到 Form 窗体, ColumnHeadersHeightSizeMode 属性设置为“ AutoSize ”;另外还要向 Form 窗体下侧添加二个 Button 控件, text 属性分别设置为“更改”、“删除”。

u 实验步骤(3):

数据库的设计参见图443

4-43 数据库设计图

数据库为 school ,共有六个表,该应用程序中只使用了表 student 。具体字段设计情况请参见图460。数据表 student 中可以先存放一部分数据,便于后面处理。数据库环境是 SQL Server 2005

u       实验步骤(4):

用鼠标双击各个 Button 控件,进入.cs文件编辑状态准备进行开发。代码加下:

//========== 动态程序部分================

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Data.SqlClient;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

namespace WindowsApplication1

{

    public partial class Form9 : Form

    {

        private SqlConnection mycon;

        private SqlDataAdapter myada;

        private SqlCommand mycomd;

        private SqlCommandBuilder mycbd;

        private DataSet myset;

        public Form9()

        {

            InitializeComponent();

            mycon = new SqlConnection("Data Source=LKJ\\SQLEXPRESS;Initial Catalog=school;Integrated Security=True");

            mycomd = new SqlCommand("select * from student",mycon);

            myada = new SqlDataAdapter();

            myada.SelectCommand = mycomd;

            mycbd = new SqlCommandBuilder(myada);

            myset = new DataSet();

            myada.TableMappings.Add("student","student");

            myada.TableMappings[0].ColumnMappings.Add("SNO", " 学号" );

            myada.TableMappings[0].ColumnMappings.Add("SNAME", " 姓名" );

            myada.TableMappings[0].ColumnMappings.Add("SEX", " 性别" );

            myada.TableMappings[0].ColumnMappings.Add("BIRTHDAY", " 生日" );

            myada.TableMappings[0].ColumnMappings.Add("CLASS", " 班级" );

        }

        /// <summary>

        /// 数据修改

        /// </summary>

        private void button1_Click(object sender, EventArgs e)

        {

            try

            {

                // 将更改的数据更新到数据表里

                myada.Update(myset.Tables["student"].GetChanges());

                MessageBox.Show(" 数据库修改成功" ," 成功信息" );

                //DataTable 接受更改,以便为下一次更改作准备

                myset.Tables["student"].AcceptChanges();

            }

            catch (SqlException ex)

            {

                MessageBox.Show(ex.ToString());

            }

        }

        /// <summary>

        /// 初始化数据

        /// </summary>

        private void Form9_Load(object sender, EventArgs e)

        {

            try

            {

                myada.Fill(myset, "student");

            }

            catch (SqlException ex)

            {

                MessageBox.Show(ex.ToString());

            }

            finally

            {

                mycon.Close();

            }

            dataGridView1.DataSource = myset.Tables["student"].DefaultView;

        }

        /// <summary>

        /// 数据删除

        /// </summary>

        private void button2_Click(object sender, EventArgs e)

        {

if (MessageBox.Show(" 确定要删除当前行数据?" , "", MessageBoxButtons.OKCancel) == DialogResult.OK)

            {

                try

                {

                    // DataTable中删除当前选中的行

                    myset.Tables[0].Rows[dataGridView1.CurrentRow.Index].Delete();

                    // 将更改的数据更新到数据表里

                    myada.Update(myset.Tables[0].GetChanges());

                    MessageBox.Show(" 数据删除成功!" );

                    //DataTable 接受更改,以便为下一次更改作准备

                    myset.Tables[0].AcceptChanges();

                }

                catch (SqlException ex)

                {

                    MessageBox.Show(ex.ToString());

                }

            }

            else

            {

                // 取消对DataTable的更改

                myset.Tables[0].RejectChanges();

            }

        }

    }

}

4.SqlCommandBuilder对象

前面示例代码中多次遇到 SqlCommandBuilder 对象。那么 SqlCommandBuilder 对象的用途是什么呢? SqlCommandBuilder 对象自动生成针对单个表的命令,用于将对DataSet所做的更改与关联的 SQL Server 数据库的更改相协调。基于适配器 SqlDataAdapter SELECT语句使用 <?xml:namespace prefix = ns2 ns = "http://msdn.microsoft.com/mshelp" /> 对象自动在数据适配器 SqlDataAdapter 中创建其他命令。

利用 SqlCommandBuilder 对象能够自动生成: INSERT 命令; UPDATE 命令; DELETE 命令;应用 SqlCommandBuilder 对象的语法见图444所示,这里只是让读者了解 SqlCommandBuilder 对象的作用,没有做深入探讨。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

4-44 应用SqlCommandBuilder对象的语法图