知识点:
了解 ADO.NET 的功能和组成、会使用 Connection 对象连接到数据库、掌握基本的异常处理、会使用 Command 对象查询单个值。
1、ADO.NET
1.1 ADO.NET是什么?
ADO.NET是一组用于和数据源进行交互的面向对象类库,通过这些类,我们可以访问和操作数据库。ADO.NET是数据库访问的方法和技术,主要用于完成C#应用程序访问数据库。
应用程序、ADO.NET、数据库,三者之间的关系
- SQL Server是一个关系数据库管理系统。基于服务器端的中型的数据库,可以适合大容量数据的应用。
- ACCESS是由微软发布的关联式数据库管理系统。桌面数据库,只适合于数据量少的应用系统。
- Oracle是基于服务器的大型数据库,主要应用于银行、证券类业务等。
1.2 ADO.NET的组成
ADO.NET由两部分组成:DataSet(数据集)和.NET Framework数据提供程序
- DataSet数据集——能临时保存各种类型数据库中的数据;
- Net framework数据提供程序——它由几个组件组成,分别负责连接、操作和访问数据库,其中负责访问数据的组件是只读只进式的,也就是说只读不修改、只能往前读不能后退,这些我们会在后面详细介绍。
1.3 ADO.NET怎么工作?
ADO.NET主要通过以下对象操作数据库:
- Connection对象,负责连接数据库。
- Command对象,对数据库进行增删改的操作。
- Datareader对象,读取数据(只读只进)。
- DataAdapter对象,从数据库获取对象后填充给DataSet临时数据库。
1.4 ADO.NET用在什么地方?
ADO.NET允许和不同类型的数据源以及数据库进行交互。我们在学习《SQL Server数据库基础》时知道目前有多种数据库产品,比如我们使用的SQL Server,再比如Oracle数据库……数据库不一样,他们所用的数据源也保存在不同的命名空间里。导入命名空间的方法:Alt+Enter或者Shilt+Alt+F10。
2、Connection对象
2.1 Connection对象的作用
Connection对象是应用程序和数据库的桥梁,起到数据连接的作用。
2.2 Connection对象的种类
前面才学过不同的数据库产品,有不同的数据库源,保存在不同的命名空间,同样,他们也会使用不同的Connection类。我们本书用的是SQL Server数据库,存放在using System.Data.SqlClient;使用的是SqlConnection类。
不同命名空间的Connection对象
命名空间 | 对应的 Connection 对象 |
System.Data.SqlClient | SqlConnection |
System.Data.OleDb | OleDbConnection |
System.Data.Odbc | OdbcConnection |
System.Data.OracleClient | OracleConnection |
MySql.Data.MySqlClient | MySqlConnection |
2.3 Connection对象的主要属性和方法
属性 | 说明 |
ConnectionString | 连接字符串 |
方法 | 说明 |
Open | 打开数据库连接 |
Close | 关闭数据库连接 |
2.4 使用Connection对象的步骤
第一步:创建连接对象(用已知的类创建对象)(要引入命名空间)
SqlConnection con = new SqlConnection();(在SqlServer数据库里,connection对象是SqlConnection类里的)//创建对象
第二步:定义连接信息(给对象添加属性)
con.ConnectionString = "data source=服务器名; initial catalog=数据库名; integrated security=true"; //给对象添加属性
(注意:\符号,在C#中要使用\\表示)
第三步:连接数据库(调用对象的方法)
con.Open();//调用方法,打开数据库
MessageBox.Show("打开数据库连接成功");//这里是提示语
注意:连接数据库之前,保证已开开启数据库服务,并且要连接的数据库是存在的。
2.5 案例演示:在窗体中点击【测试】按钮,连接数据库。
前期准备工作:
第一步:在Visual Studio 2017软件中,新建一个窗体项目
第二步:在Visual Studio 2017软件中,添加MySQL数据库
第三步:在窗体上拖放一个button按钮,设置该button按钮的text属性为“测试”
第四步:创建一个数据库carsys,然后创建一个数据表brand,下面有2个字段BrandId,BrandName。
第五步:在Visual Studio 2017软件刚创建的项目中,双击窗体上的【测试】按钮,进入代码编写模式。
命名空间中增加:
using MySql.Data.MySqlClient;
第五步:在Visual Studio 2017软件刚创建的项目中,双击窗体上的【测试】按钮,进入代码编写模式。
双击按钮,进入的是该按钮的点击事件,我们在点击事件(方法)里编写代码
(1)、创建连接字符串
string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306"
Server=localhost ---》 表示打开本地数据库
UserId=root ---》MYSQL数据库安装时规定的名称
Password=68331 ---》MYSQL数据库安装时规定的密码
Database=CarSYS ---》使用Workbench软件创建的一个数据库,数据库名为 CarSYS
port=3306 ---》MYSQL数据库安装时规定的端口
//第一步:创建连接字符串
string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息
(2)创建一个Connection对象。
语法:方法名 对象名 = new 方法名();
//第二步:创建一个MySqlConnection连接对象
MySqlConnection con = new MySqlConnection(constr);//创建一个MysqlConnection对象
(3)连接数据库,使用对象con的方法Open()
语法:对象名.Open();
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//第一步:创建连接字符串
string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息
//第二步:创建一个MySqlConnection连接对象
MySqlConnection con = new MySqlConnection(constr);//创建一个MysqlConnection对象
//第三步:连接数据库,使用对象con的Open方法
con.Open();
MessageBox.Show("数据库连接成功!"); //消息提示框,用以告诉用户连接结果
//注意:使用完后要关闭数据库。减小数据库所在服务器的压力
con.Close();
}
}
}
注意:使用完后要关闭数据库。减小数据库所在服务器的压力。
运行结果如下:
3、异常处理
程序在运行时,可能会因为各种突发状况出现异常。比如数据库服务器出错,网络断线等。异常的出现可能会导致程序突然退出,影响用户的使用。因此,程序员要在编码时对可能出现的异常进行处理,以保证程序的正常运行。
方法:尝试出错。
语法:
try
{
//可能出现异常的代码
}
catch (处理的异常类型)
{
//处理异常的代码
}
finally
{
//无论如何都会执行的代码
}
执行try语句里的代码,如果出现异常则执行catch语句代码,没有异常则catch语句代码不会被执行。异常的类型有很多,我们一般使用Exception,它代表所有的异常类型。此语法还可以添加finally语句,来执行一些无论有无异常,都要执行的代码,如关闭数据库等。
private void button1_Click(object sender, EventArgs e)
{
//第一步:创建连接字符串
string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息
//第二步:创建一个MySqlConnection连接对象
MySqlConnection con = new MySqlConnection(constr);//创建一个MysqlConnection对象
//第三步:连接数据库,使用对象con的Open方法
try
{
con.Open(); //打开数据库
MessageBox.Show("数据库连接成功!"); //消息提示框,用以告诉用户连接结果
}
catch (Exception ex)//如果出现异常,则允许catch里的代码
{
MessageBox.Show(ex.Message);//以消息框形式,输出异常消息
}
finally //不管程序错误与否,都会执行的代码
{
con.Close();
MessageBox.Show("关闭数据库连接成功");
}
}
4、使用Command对象
程序连接上数据库后,我们需要对数据库中的数据进行操作,Command(命令)对象可以对数据表中的数据进行增删改查操作。和Connection对象一样,不同的数据库产品有不同的命名空间,对应不同的Command对象。
不同命名空间的Command对象
命名空间 | 对应的 Command 对象 |
System.Data.SqlClient | SqlCommand |
System.Data.OleDb | OleDbCommand |
System.Data.Odbc | OdbcCommand |
System.Data.OracleClient | OracleCommand |
MySql.Data.MySqlClient | MySqlCommand |
使用Command的步骤如下:
- 创建Connection对象
- 给Connection对象添加属性
- 调用Connection对象Open()方法打开数据库
- 创建sql语句字符串
- 创建Command对象 SqlCommand cmd = new SqlCommand(sql语句, Connection对象);
- 执行命令,并将结果赋值给变量 int count = Convert.ToInt32(cmd.ExecuteScalar());
- 输出结果
第一步:创建一个WINFORM窗体工程项目,窗体上有一个button1按钮。
第二步:添加MySQL数据库
第三步:鼠标双击button1按钮,进入程序编码
命名空间增加 using MySql.Data.MySqlClient;
using MySql.Data.MySqlClient;
数据库CarSYS中有一个数据表Brand中的数据库记录如下:
完整的程序代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace WindowsFormsApp5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息
//1.创建 SQLConnection 的实例
MySqlConnection connection = new MySqlConnection(constr);//创建一个SqlConnection对象
try //将可能出错的语句放在try语句里
{
connection.Open();
//创建查询用的SQL语句
string sqlstr = "select count(*) from Brand";//声明一个字符串,用来存放查询数据库表语句
//创建Command对象
MySqlCommand cmd = new MySqlCommand(sqlstr, connection);
//调用Command对象的方法
int count = Convert.ToInt32(cmd.ExecuteScalar());
//显示结果
string message = string.Format("Brand表中共有{0}条信息!", count);
MessageBox.Show(message);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);//以消息框形式,输出错误消息
}
finally
{
if (connection != null)
{
//关闭数据库连接
connection.Close();
MessageBox.Show("关闭数据库连接成功");
}
}
}
}
}
运行效果如下:
5、实例练习
要求:模拟QQ登录窗体,用户输入账号、密码,和数据库中已存的信息进行匹配,正确则提示“成功”,错误则提示“错误”
分析:此功能首先需要连接数据库(Connection对象),其次要能够将用户输入的账号密码提取出来,并和数据库里的用户信息进行匹配查询(Command对象)。如何判断输入正确?只有用户名和密码一一匹配,才可以登录。
第一步:在Visual Studio 2017中设计窗体界面:
第二步:添加MySQL数据库
参见上面过程
第三步:双击【登陆】按钮,进入事件编写代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace WindowsFormsApp5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//提取用户输入的账号和密码,后面要用来和数据库里的用户名和密码相匹配
string name = textBox1.Text;
string pwd = textBox2.Text;
string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息
//1.创建 SQLConnection 的实例
MySqlConnection connection = new MySqlConnection(constr);//创建一个SqlConnection对象
try //将可能出错的语句放在try语句里
{
connection.Open();
//创建查询用的SQL语句
string sqlstr = string.Format("select count(*) from Brand where BrandId='{0}' and BrandName='{1}'", name, pwd);
//创建Command对象
MySqlCommand cmd = new MySqlCommand(sqlstr, connection);
//调用Command对象的方法
int count = Convert.ToInt32(cmd.ExecuteScalar());
//显示结果
if (count > 0)
{
MessageBox.Show("登录成功");
} else
{
MessageBox.Show("登录失败");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);//以消息框形式,输出错误消息
}
finally
{
if (connection != null)
{
//关闭数据库连接
connection.Close();
MessageBox.Show("关闭数据库连接成功");
}
}
}
}
}
运行效果
思考:如果用户没有输入账号或密码,直接点击【登陆】按钮,如何提示?(先提示用户用户或密码不能为空,如何实现?)
思考:如何实现用户的注册功能?窗体界面增加一个注册按钮,当用户注册成功后,使用新账户可以直接登录。
提示:ExecuteNonQuery方法的使用
6、实现用户的注册功能
窗体界面增加一个注册按钮button2,当用户注册成功后,使用新账户可以直接登录。
完整的程序代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace WindowsFormsApp5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//提取用户输入的账号和密码,后面要用来和数据库里的用户名和密码相匹配
string name = textBox1.Text;
string pwd = textBox2.Text;
string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息
//1.创建 SQLConnection 的实例
MySqlConnection connection = new MySqlConnection(constr);//创建一个SqlConnection对象
try //将可能出错的语句放在try语句里
{
connection.Open();
//创建查询用的SQL语句
string sqlstr = string.Format("select count(*) from Brand where BrandId='{0}' and BrandName='{1}'", name, pwd);
//创建Command对象
MySqlCommand cmd = new MySqlCommand(sqlstr, connection);
//调用Command对象的方法
int count = Convert.ToInt32(cmd.ExecuteScalar());
//显示结果
if (count > 0)
{
MessageBox.Show("登录成功");
} else
{
MessageBox.Show("登录失败");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);//以消息框形式,输出错误消息
}
finally
{
if (connection != null)
{
//关闭数据库连接
connection.Close();
MessageBox.Show("关闭数据库连接成功");
}
}
}
private void button2_Click(object sender, EventArgs e)
{
//提取用户输入的账号和密码,后面要用来和数据库里的用户名和密码相匹配
string name = textBox1.Text;
string pwd = textBox2.Text;
string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息
//1.创建 SQLConnection 的实例
MySqlConnection connection = new MySqlConnection(constr);//创建一个SqlConnection对象
try //将可能出错的语句放在try语句里
{
connection.Open();
//创建查询用的SQL语句
string sqlstr = string.Format("insert into Brand(BrandId,BrandName) values('{0}','{1}')", name, pwd);
//创建Command对象
MySqlCommand cmd = new MySqlCommand(sqlstr, connection);
//执行command对象
cmd.ExecuteNonQuery();
MessageBox.Show("注册成功"); //提示消息框
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);//以消息框形式,输出错误消息
}
finally
{
if (connection != null)
{
//关闭数据库连接
connection.Close();
//MessageBox.Show("关闭数据库连接成功");
}
}
}
}
}
————————————————
版权声明:本文为CSDN博主「逍遥小丸子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dnruanjian/article/details/90293680
https://blog.csdn.net/dnruanjian/article/details/90293680