3.案例学习:SQLDataAdapter完成对数据库的删除修改和插入
本实验目标是要求编写一个应用程序,利用
SQLDataAdapter
对象实现可以添加、修改、删除学生基本信息的功能。用户界面如图4-42所示:
图4-42 学生基本信息应用程序界面图
u
实验步骤(1):
在
VS.NET 2005
中新建一个名为示例2的基于
Windows
的项目。将默认窗体重命名为
form9
.cs
。
u
实验步骤(2):
从工具箱之中拖拽一个
dataGridView
控件到
Form
窗体,
ColumnHeadersHeightSizeMode
属性设置为“
AutoSize
”;另外还要向
Form
窗体下侧添加二个
Button
控件,
text
属性分别设置为“更改”、“删除”。
u
实验步骤(3):
数据库的设计参见图4-43:
图4-43 数据库设计图
数据库为
school
,共有六个表,该应用程序中只使用了表
student
。具体字段设计情况请参见图4-60。数据表
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语句使用
SqlCommandBuilder
对象自动在数据适配器
SqlDataAdapter
中创建其他命令。
利用
SqlCommandBuilder
对象能够自动生成:
INSERT
命令;
UPDATE
命令;
DELETE
命令;应用
SqlCommandBuilder
对象的语法见图4-44所示,这里只是让读者了解
SqlCommandBuilder
对象的作用,没有做深入探讨。
图4-44 应用SqlCommandBuilder对象的语法图
本文出自 “熊猫写程序” 博客,转载请与作者联系!