您好,欢迎来到刀刀网。
搜索
您的当前位置:首页数据库的连接与访问 实验指导

数据库的连接与访问 实验指导

来源:刀刀网
实验十二 数据库的连接与访问 实验指导

ADO.NET是.NET Framework中的一系列类库,提供了在.NET开发中数据库所需的操作的类。在.NET应用程序开发中,C#可以使用ADO.NET。

可以将ADO.NET看做是一个介于数据源和数据使用者之间的转换器,如图1所示。ADO.NET接收使用者语言中的命令,如连接数据库、返回数据集等,然后将这些命令转换成可以在数据源中正确执行的语句。

.NET应用程序

图1 ADO.NET的功能示意图

一、ADO.NET 命名空间及其常用类

ADO.NET体系结构的类包含在System.Data命名空间中(命名空间相当于一个容器,它包含一组定义的类或结构,命名空间也可以嵌套在另一个命名空间中。.NET类库提供了很多类,根据类的功能不同,又划分了很多命名空间,而这些命名空间大多数有一个顶级的命名空间System。其中System.Data命名空间提供对表示ADO.NET结构的类的访问),根据功能划分,System.Data又包含了多个子空间。System.Data命名空间及其子空间所包含的常用类如表1所示。

表1 System.Data命名空间及其子空间的常用类

命名空间 System.Data System.Data System.Data System.Data System.Data System.Data 类 DataSet DataTable DataRow DataColumn DataRelation Constraint 说明 表示数据在内存中的缓存 表示内存中数据的一个表 表示DataTable中的一行数据 表示DataTable中列的架构 表示两个DataTable对象之间外键码和主/从关系 表示可在一个或多个DataColumn对象上强制的约束 表示DataRow的自定义视图 表示SQL Server数据库的一个打开的连接 表示要对SQL Server数据库执行的一个Transact-SQL语句或存储过程 自动生成单表命令,用于对DataSet所做的更改与关联的SQL Server数据库的更改相ADO.NET 数据库/数据源 System.Data System.Data.Sqlclient System.Data.Sqlclient DataRowView SqlConnection SqlCommand System.Data.Sqlclient SqlCommandBuilder - 1 -

协调 System.Data.Sqlclient SqlDataAdapter 表示用于填充DataSet和更新SQL Server数据库的一组数据命令和一个数据库连接 提供一种从SQL Server数据库读取行的只进流的方式 表示SqlCommand的参数,也可以是它到DataSet列的映射 表示要在SQL Server数据库中处理的Transact-SQL事务 System.Data.Sqlclient System.Data.Sqlclient SqlDataReader SqlParameter System.Data.Sqlclient SqlTransaction 二、ADO.NET数据库访问

下面以一个简单的实例来说明在C#应用程序设计中如可使用ADO.NET来访问数据库。 首先用Visual Studio 2008中的C#设计一个如图2所示的窗体。

图2 学生注册信息管理的窗体设计

建立上述窗体的过程如下:

(1)启动Visual Studio 2008,然后文件->新建 项目,弹出如图3所示的对话框。

- 2 -

图3 新建项目对话框

在新建项目对话框中,选择左侧的项目类型为“Visual C# --Windows”,右侧的模板中选择“Windows 窗体应用程序”,下面输入项目的名称例如studentmis,并设置好存储路径,然后点击确定,生成如图4所示的Form1窗体。

图4 Form1窗体

- 3 -

然后在工具箱(如果工具箱未显示,则需要点击视图->工具箱)中,分别从“数据”、“容器”、“公共组件”工具箱中拖放DataGridView控件、Pannel控件、Lable控件、Combox控件、TextBox控件、Button控件到该窗体中,并修改相应的Name属性。

该窗体包含1个DataGridView控件用以显示数据表的数据;1个Pannel控件用以组合数据操作的全部组件;2个Lable控件用以显示“学号”、“姓名”标题;1个Combox控件用作“学号”的选项列表,该控件的Name属性为cbsno;1个TextBox控件用作“姓名”的输入,该控件的Name属性为tbsname;4个Button控件用作对数据库的“增加”、“修改”、“删除”、“查询”操作,并将这4个控件的Name属性分别设置为btnadd、btnupdate、btndelete、btnselect。

该窗体的功能设计包含了对数据库的基本操作。    

增加:cbsno、tbsname作为追加一条记录的内容输入。

修改:以cbsno为“学号”条件,修改该cbsno的“姓名”。 删除:以cbsno为“学号”条件,删除该cbsno对应的记录。

查询:以cbsno为“学号”条件,从其下拉列表中选择,然后选择出的记录显示在DataGridView中。

1.ADO.NET数据库访问步骤

图5是ADO.NET访问数据库的步骤。

使用对象的Open()方法打开连接

调用执行命令的对象

使用对象的Close()方法关闭连接

结束 图5 ADO.NET访问数据库的步骤

- 4 -

开始 创建一个连接对象 创建一个封装SQL命令的对象 执行数据库操作 2.SqlConnection类与数据库连接

ADO.NET通过ADOConnection连接到数据库,ADOConnection包括Open()方法和Close()方法。Open用于打开数据库连接,Close关闭数据库连接。在每次打开数据库连接后,都需要关闭数据库连接。

连接SQL Server数据库时,需要使用.NET提供的SqlConnection对象,在使用SqlConnection类时,需要引用命名空间 using System.Data.SqlClient。在使用SqlConnection类连接数据库之前,通常要构造一个连接字符串,通过该字符串使应用程序与数据库建立连接。

(1)连接SQL Server数据库

ADO.NET中可用两种方式连接SQL Server数据库,一种是SQL Server登录方式,一种是集成登录方式。

① SQL Server登录方式

登录前不管Windows是否通过了身份验证,都需要提供相应的SQL Server用户名和密码,才能登录到SQL Server数据库。

SQL Server登录方式连接本地的studentmis数据库的实例代码如下:

//声明连接字符串

String strCon;

//声明SqlConnection对象 SqlConnection sqlCon;

//编写数据库连接字符串:server为“服务器IP地址(或名称)”,database为“数据库名称”,uid为“数据库用户名”,pwd为“数据库密码”

strCon =\"server='XTWANG';database='studentmis';uid='sa';pwd='sql2005'\"; //新建SQL Server连接

SqlConnection sqlCon=new SqlConnection (strCon); sqlCon =new SqlConnection (strCon);

try

{

//打开SQL连接 sqlCon.Open();

//连接数据库成功后的相应数据库操作 …

//关闭SQL连接 sqlCon.Close();

}

catch (SystemException ex)

{

//连接数据库失败提示

- 5 -

}

② 集成登录方式

这是一种信任登录,即SQL Server数据库服务器信任Windows系统,如果Windows系统通过了验证,则SQL server将不再进行身份验证,也就不需要提供用户名和密码了。

集成登录方式连接本地的studentmis数据库的代码如下:

SqlConnection sqlCon=new SqlConnection (\"data Source=(local);Initial Catalog=studentmis;Integrated Secutity=true\");

(2)使用Sqlconnection 连接SQL Server应用示例

在此编写一个对数据库进行各项操作时均可调用的数据库连接的公共方法,以避免在每个数据库操作时都要进行的数据库连接,从而简化程序设计,也便于维护代码。 (1)//添加命名空间

using System.Data.SqlClient;

(2)// -----定义全局变量:声明连接字符串和SqlConnection对象-----

//声明连接字符串 String strCon;

//声明SqlConnection对象 SqlConnection sqlCon;

(3)//-----连接数据库,设计数据库连接的公共方法,以免每个数据库连接操作时都要进行数据库连接,

简化程序,便于维护------

private void DBConnect() {

//编写数据库连接字符串:server为“服务器IP地址(或名称)”,database为“数据库名称”,uid为“数据库用户名”,pwd为“数据库密码”

strCon =\"server='XTWANG';\"+\"database='studentmis';uid='sa';pwd='sql2005'\"; //新建SQL Server连接

sqlCon =new SqlConnection (strCon); }

(4)在后面进行的数据库增加、修改、删除、查询的功能代码段中要首先调用上述的数据库连接方法,

以建立与指定数据库的连接,然后再执行相应的数据库操作。最后断开数据库连接。代码如下:

DBConnect();

sqlCon.Open(); …….//数据库操作代码

sqlCon.Close();

3.DataSet数据集与DataAdapter数据适配器

- 6 -

DataSet是数据的集合(数据集),表示来自一个或多个数据源数据的本地副本,在内存中被缓存,所以也可以看作是一个虚拟的表。DataSet从数据源中加载数据后,就会断开与数据源的连接,然而DataSet必须要与一个或多个数据源进行交互,DataAdapter就像一座桥梁提供了DataSet对象与数据源之间的连接。

为了实现这种交互,.NET提供了SqlDataAdapter类,它专用于SQL Server数据库。 (1)利用DataAdapter将数据填充到DataSet

使用DataAdapter属性指定需要执行的操作,这个属性可以是一条SQL语句或者存储过程,再通过DataAdapter对象的Fill方法,即可将返回的数据存放到DataSet数据集中。利用DataAdapter将数据填充到DataSet数据集的基本步骤如下:

① 创建DataAdapter对象 示例代码:

//创建DataAdapter对象

SqlDataAdapter da = new SqlDataAdapter(\"select * from student\",sqlCon );

DataAdapter对象的构造函数允许传递2个初始化参数,第1个参数为SQL语句,第2个参数为数据库连接的SqlConnection对象。

② 创建数据集 示例代码如下:

//创建数据集

DataSet ds = new DataSet(); //Fill方法填充

da.Fill(ds,\"tablename\");

DataSet可以被看作是一个虚拟的表或表的集合,这个表的名称在Fill方法中可以任意命名(如tablename)。

③ 显示DataSet的数据

当返回的数据被存放到数据集中后,可以通过循环语句遍历和显示数据集中的信息。当需要显示表中某一行字段的值是,可以通过DataSet对象获取相应行的某一列的值,示例代码如下:

//获取数据集

ds.Tables[\"tablename\"].Rows[0][\"sname\"].ToString();

- 7 -

上述代码从DataSet对象中的虚表tablename中的第0行中获取sname列的值。 ④ 绑定DataSet数据集到列表控件或者数据显示控件上

为了更方便地显示数据,也可以将DataSet数据集绑定到DataGridView、ListBox或ComboBox控件上。

将DataSet数据集绑定到DataGridView上的示例代码:

// 将DataSet数据集绑定到DataGridView dataGridView1.DataSource = ds.Tables[0];

4.SqlCommand类与SQL Server数据库操作

SqlCommand类可用于对SQL Server数据库执行一个T-SQL语句或者存储过程,如执行对数据表数据的插入、修改或删除操作,也可对数据表进行创建、修改或删除操作。

(1)SqlCommand类的常用方法如表2所示。

表2 SqlCommand类的常用方法

方法 Cancle CreateParameter ExecuteNonQuery ExecuteReader 说明 试图取消SqlCommand的执行 创建SqlParameter对象的新实例 对连接执行T-SQL语句并返回受影响的行数 将CommandText发送到Connection并生成一个SqlDataReader对象 ① Command对象用于数据操作的基本步骤如下: 创建Command对象 示例代码如下:

//向数据表student(sno,sname)中插入一条记录

SqlCommand cmd = new SqlCommand(\"insert into student values('200101','张洋')\",sqlCon);

SqlCommand对象的构造函数允许传递2个初始化参数,第1个参数为SQL语句,第2个参数为数据库连接的SqlConnection对象。

② ExecuteNonQuery方法

当执行的SQL语句不返回任何行时(如常用的insert、update以及delete语句以及很多存储过程),就可以使用ExecuteNonQuery方法。

- 8 -

示例代码如下:

//执行上述的向数据表student中插入一条记录的SQL 语句 cmd.ExecuteNonQuery();

(2)SqlCommand类应用示例的程序设计

以下程序段完成4个按钮对数据库进行的增加、修改、删除、查询操作,在代码段中首先调用前面设计的数据库连接方法,以建立与指定数据库的连接,然后再执行相应数据库操作,最后断开数据库连接。 例1:插入一条学生记录

private void btnadd_Click(object sender, EventArgs e) {

//-----增加记录----

DBConnect(); sqlCon.Open();

SqlCommand cmd = new SqlCommand(\"insert into student values('\" +cbsno .Text+ \"','\" + tbsname.Text + \"')\", sqlCon); //执行SQL 语句,增加记录 cmd.ExecuteNonQuery(); sqlCon.Close(); }

例2:修改一条学生记录

private void btnupdate_Click(object sender, EventArgs e) {

//-----修改记录------ DBConnect(); sqlCon.Open();

SqlCommand cmd = new SqlCommand(\"update student set sname='\"+tbsname .Text+\"'where sno='\"+cbsno.Text+\"'\",sqlCon); //执行SQL 语句,修改记录 cmd.ExecuteNonQuery(); sqlCon.Close(); }

例3:删除一条学生记录

private void btndelete_Click(object sender, EventArgs e) {

- 9 -

//-----删除记录------ DBConnect(); sqlCon.Open();

SqlCommand cmd = new SqlCommand(\"delete from student where sno='\" + cbsno.Text + \"'\", sqlCon);

//执行SQL 语句,删除记录 cmd.ExecuteNonQuery(); sqlCon.Close(); }

例4:查询一名学生信息

private void btnselect_Click(object sender, EventArgs e) {

//-----查询记录------ DBConnect(); sqlCon.Open();

SqlCommand cmd = new SqlCommand(\"delete from student where sno='\" + cbsno.Text + \"'\", sqlCon);

//创建DataAdapter对象

SqlDataAdapter da = new SqlDataAdapter(\"select sno as 学号,sname as 姓名 from student where sno like '%\"+cbsno .Text +\"%'\",sqlCon ); //创建数据集

DataSet ds = new DataSet(); //Fill方法填充

da.Fill(ds,\"tablename\");

// 将DataSet数据集绑定到DataGridView dataGridView1.DataSource = ds.Tables[0]; sqlCon.Close(); }

程序运行截图如下图5所示。

- 10 -

图5程序运行界面图

该程序的全部源代码:

using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;

using System.Windows.Forms; //添加命名空间

using System.Data.SqlClient; namespace studentmis {

public partial class Form1 : Form {

// -----定义全局变量:声明连接字符串和SqlConnection对象----- //声明连接字符串 String strCon;

//声明SqlConnection对象 SqlConnection sqlCon;

public Form1()

- 11 -

{

InitializeComponent(); }

//-----连接数据库,设计数据库连接的公共方法,以免每个数据库连接操作时都要进行数据库连接,简化程序,便于维护------

private void DBConnect() {

//编写数据库连接字符串:server为“服务器IP地址(或名称)”,database为“数据库名称”,uid为“数据库用户名”,pwd为“数据库密码”

strCon =\"server='XTWANG';database='studentmis';uid='sa';pwd='sql2005'\"; //新建SQL Server连接

sqlCon =new SqlConnection (strCon); }

//-----刷新显示相关数据的方法 private void ComonDataView() { try {

DBConnect();

//连接数据库成功后的操作 //创建DataAdapter对象

SqlDataAdapter da = new SqlDataAdapter(\"select sno as 学号,\" + \"sname as 姓名 from student\", sqlCon); //创建数据集

DataSet ds = new DataSet(); //Fill方法填充

da.Fill(ds, \"tablename\"); //将DataSet数据集绑定到TextBox

dataGridView1.DataSource = ds.Tables[0]; //指定列表中要显示的数据表的具体字段

//例如,列表时显示的学号,但保存的数据是学号sno cbsno.DisplayMember = \"学号\"; //指定最终实际存储的数据表的具体字段 cbsno.ValueMember = \"学号\"; //绑定数据源

cbsno.DataSource = ds.Tables[0].DefaultView; }

catch (SystemException ex) {

//连接数据库失败提示

MessageBox.Show(\" 错误\" + ex.Message, \"错误提示\", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); }

- 12 -

finally {

//如果处于与数据库连接状态

if (sqlCon.State == ConnectionState.Open) { //关闭SQL连接 sqlCon.Close(); //释放占用的资源 sqlCon.Dispose(); }

} }

//----在窗体加载时显示数据表原始数据,并初始化列表项中的数据 private void Form1_Load(object sender, EventArgs e) {

ComonDataView(); }

private void btnadd_Click(object sender, EventArgs e) {

//-----增加记录----

DBConnect(); sqlCon.Open();

SqlCommand cmd = new SqlCommand(\"insert into student values('\" +cbsno .Text+ \"','\" + tbsname.Text + \"')\", sqlCon); //执行SQL 语句,增加记录 cmd.ExecuteNonQuery(); sqlCon.Close(); }

private void btnupdate_Click(object sender, EventArgs e) {

//-----修改记录------ DBConnect(); sqlCon.Open();

SqlCommand cmd = new SqlCommand(\"update student set sname='\"+tbsname .Text+\"'where sno='\"+cbsno.Text+\"'\",sqlCon); //执行SQL 语句,修改记录 cmd.ExecuteNonQuery(); sqlCon.Close(); }

- 13 -

private void btndelete_Click(object sender, EventArgs e) {

//-----删除记录------ DBConnect(); sqlCon.Open();

SqlCommand cmd = new SqlCommand(\"delete from student where sno='\" + cbsno.Text + \"'\", sqlCon);

//执行SQL 语句,删除记录 cmd.ExecuteNonQuery(); sqlCon.Close(); }

private void btnselect_Click(object sender, EventArgs e) {

//-----查询记录------ DBConnect(); sqlCon.Open();

SqlCommand cmd = new SqlCommand(\"delete from student where sno='\" + cbsno.Text + \"'\", sqlCon);

//创建DataAdapter对象

SqlDataAdapter da = new SqlDataAdapter(\"select sno as 学号,sname as 姓名 from student where sno like '%\"+cbsno .Text +\"%'\",sqlCon ); //创建数据集

DataSet ds = new DataSet(); //Fill方法填充

da.Fill(ds,\"tablename\");

// 将DataSet数据集绑定到DataGridView dataGridView1.DataSource = ds.Tables[0]; sqlCon.Close(); } } }

- 14 -

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务