C#编程基础(下)第五课:ADO.NET数据库开发(一)使用Connection对象将窗体程序和数据库连接

知识点:了解 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

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 案例演示:在窗体中点击【测试】按钮,连接数据库。

前期准备工作:

第一步:在VS软件中,新建一个窗体窗体项目。并在窗体上拖放一个button按钮,设置该button按钮的text属性为“测试”

第二步:启动SQL服务,在SSMS软件中,新创建一个数据库TestDB.

使用SQL语句,在数据库中新创建一个数据库表,并插入两行数据。

--使用数据库
use TestDB;
--创建表
create table stu(
	id int primary key identity (1,1),
	names nvarchar(20) not null,
	pwd nvarchar(20) not null
);
--插入数据到表stu中
insert into stu(names,pwd) values('赵丽颖','zly1123');
insert into stu(names,pwd) values('杨幂','ym111');

 

第三步:在VS软件刚创建的项目中,双击窗体上的【测试】按钮,进入代码编写模式。

双击按钮,进入的是该按钮的点击事件,我们在点击事件(方法)里编写代码

(1)创建一个connection对象。

语法:方法名 对象名 = new 方法名();

注意:当我们按照正确语法写完第一句代码时,出现红色波浪线报警,鼠标移上去以后,提示

“未能找到类型或命名空间名“SqlConnection”(是否缺少using指令或程序集引用?)

显示可能的修补程序(Alt+Enter or Ctrl+,)”

操作方法:鼠标依次点击“显示可能的修补程序”——using System.Data.SqlClient;

(2)给新创建的对象con添加ConnectionString 属性。

语法1:对象名.ConnectionString = "data source=服务器名; initial catalog=数据库名; integrated security=true";

语法2:对象名.ConnectionString = "data source=服务器名; initial catalog=数据库名; user id=登录名;  pwd=登录密码 ";

(3)连接数据库,使用对象con的方法Open()

语法:对象名.Open();

注意:使用完后要关闭数据库。减小数据库所在服务器的压力。

注意:如果在数据库连接时,提示“不支持关键字data source”

解决办法:把 data source改成server

语法:对象名.ConnectionString = "Server=服务器名; initial catalog=数据库名; integrated security=true";

 

3、异常处理

        程序在运行时,可能会因为各种突发状况出现异常。比如数据库服务器出错,网络断线等。异常的出现可能会导致程序突然退出,影响用户的使用。因此,程序员要在编码时对可能出现的异常进行处理,以保证程序的正常运行

        方法:尝试出错。

        语法:

try
{
      //可能出现异常的代码
}
catch (处理的异常类型)
{
      //处理异常的代码
}
finally
{
     //无论如何都会执行的代码
}

       执行try语句里的代码,如果出现异常则执行catch语句代码,没有异常则catch语句代码不会被执行。异常的类型有很多,我们一般使用Exception,它代表所有的异常类型。此语法还可以添加finally语句,来执行一些无论有无异常,都要执行的代码,如关闭数据库等。

        //按钮的点击事件,实现点击按钮时,连接数据库
        private void button1_Click(object sender, EventArgs e)
        {
            //创建链接对象
            SqlConnection con = new SqlConnection();
            //给对象添加属性
            con.ConnectionString = "data source=LAPTOP-IN3E6IJP\\SQLEXPRESS; initial catalog=TestDB; integrated security=false";
            try  //将可能出现异常的代码,放在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

                                                                 Command对象的主要属性和方法

属性

说明

Connection 

Command对象使用的数据库连接

CommandText

执行的SQL语句

方法

说明

ExecuteNonQuery

执行不返回行的语句,如UPDATE等

ExecuteReader

返回DataReader对象

ExecuteScalar

返回单个值,如执行COUNT(*)

ExecuteScalar()方法的返回值的数据类型是Object类型。如果执行的SQL语句是一个查询语句(SELECT),则返回结果是查询后的第一行的第一列,如果执行的SQL语句不是一个查询语句,则会返回一个未实例化的对象,必须通过类型转换来显示。

使用Command的步骤如下:

  1. 创建Connection对象
  2. 给Connection对象添加属性
  3. 调用Connection对象Open()方法打开数据库
  4. 创建sql语句字符串
  5. 创建Command对象 SqlCommand cmd = new SqlCommand(sql语句, Connection对象);
  6. 执行命令,并将结果赋值给变量 int count = Convert.ToInt32(cmd.ExecuteScalar());
  7. 输出结果

举例:查询数据表Stu表中有多少行数据记录

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Part9
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //按钮的点击事件,实现点击按钮时,连接数据库
        private void button1_Click(object sender, EventArgs e)
        {
            //1、创建链接对象
            SqlConnection con = new SqlConnection();
            //2、给对象添加属性
            con.ConnectionString = "data source=LAPTOP-IN3E6IJP\\SQLEXPRESS; initial catalog=TestDB; integrated security=true";
            try  
            {
                //3、打开数据库连接
                con.Open();
                //4、创建查询用的SQL语句
                string sql = "select count(*) from Stu";
                //5、创建Command对象
                SqlCommand  cmd = new SqlCommand(sql, con);
                //6、调用Command对象的方法,
                int count = Convert.ToInt32(cmd.ExecuteScalar());
                //7、显示结果
                string message = string.Format("Stu表中共有{0}条学员信息!", count);
                MessageBox.Show(message);
            }
            catch (Exception ex)//如果出现异常,则允许catch里的代码
            {
                MessageBox.Show(ex.Message);//以消息框形式,输出错误消息
            }
            finally //不管程序错误与否,都会执行的代码
            {
                con.Close();
                MessageBox.Show("关闭数据库连接成功");
            }
        }
    }
}

 

5、实例练习

要求:模拟QQ登录窗体,用户输入账号、密码,和数据库中已存的信息进行匹配,正确则提示“成功”,错误则提示“错误”

 

分析:此功能首先需要连接数据库(Connection对象),其次要能够将用户输入的账号密码提取出来,并和数据库里的用户信息进行匹配查询(Command对象)。如何判断输入正确?只有用户名和密码一一匹配,才可以登录。

第一步:在VS中设计窗体界面:

第二步:双击【登陆】按钮,进入事件编写代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Part9
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //提取用户输入的账号和密码,后面要用来和数据库里的用户名和密码相匹配
            string name = textBox1.Text;
            string pwd = textBox2.Text;
            //1、创建SqlConnection链接对象
            SqlConnection con = new SqlConnection();
            //2、给链接对象添加属性
            con.ConnectionString = "data source=LAPTOP-IN3E6IJP\\SQLEXPRESS; initial catalog=TestDB;  integrated security=true";
            try
            {
                //3、打开数据库
                con.Open();
                //4、创建sql语句字符串(注意查询语句where条件里对应的列名要书写正确)
                string sql = string.Format("select count(*) from stu where names='{0}' and pwd='{1}'", name, pwd);
                ///5、创建Command对象
                SqlCommand cmd = new SqlCommand(sql, con);
                //6、执行查询,并将查询结果赋值给变量i
                int i = Convert.ToInt32(cmd.ExecuteScalar());
                //7、判断登录是否成功
                if (i > 0)
                {
                    MessageBox.Show("登录成功");
                }
                else
                {
                    MessageBox.Show("登录失败");
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();//关闭数据库连接
            }
        }
    }
}

思考:如果用户没有输入账号或密码,直接点击【登陆】按钮,如何提示?(先提示用户用户或密码不能为空,如何实现?)

思考:如何实现用户的注册功能?窗体界面增加一个注册按钮,当用户注册成功后,使用新账户可以直接登录。

提示:ExecuteNonQuery方法的使用

        private void button2_Click(object sender, EventArgs e)
        {
            //提取用户输入的账号和密码,后面要用来和数据库里的用户名和密码相匹配
            string name = textBox1.Text;
            string pwd = textBox2.Text;
            //1、创建SqlConnection链接对象
            SqlConnection con = new SqlConnection();
            //2、给链接对象添加属性
            con.ConnectionString = "data source=LAPTOP-IN3E6IJP\\SQLEXPRESS; initial catalog=TestDB;  integrated security=true";
            try
            {
                //3、打开数据库
                con.Open();
                //4、创建sql语句字符串(注意插入语句时,列的值如果是字符,要用单引号引起来)
                string sql = string.Format("insert into stu(names,pwd) values('{0}','{1}')", name, pwd);
                ///5、创建Command对象
                SqlCommand cmd = new SqlCommand(sql, con);
                //6、执行command对象
                cmd.ExecuteNonQuery();
                MessageBox.Show("注册成功");  //提示消息框
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();//关闭数据库连接
            }
        }

 

 

 

 

 

========================这里是结束分割线===========================

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逍遥小丸子

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值