数据库访问技术ADO.NET

夏侯航
2023-12-01

ADO.NET是一组公开数据访问服务的类,为创建分布式数据共享应用程序提供了一组发放的组件

ADO.NET访问数据库原理

1.ADO.NET的主要组件

需要用到ADO.NET提供的两个组件:NET数据提供程序和DAtaSet(数据集).

(1).NET数据通提供程序:k可以实现数据集和对数据的快速,只读只进访问。

(2)DataSer(数据集):ADO.NET的断开式的核心组件。

2.NET数据提供程序的四大核心对象

(1)Connection对象:用于开启程序和数据库之间的连接

(2)Command对象:用于对数据库发出一些操作指令。例如,可以对数据库下达查询、新增、修改、删除数据指令,以及调用数据库中的存储过程等。

(3)DataAdapter对象:在数据库和DataSet之间执行数据传输工作。在Command对象下达命令后将返回数据放DataSet(数据集)中.

(4)DataReader对象:当只需逐以读取数据而不需要其他操作时,可以使用DataReader对象。DataReader对象每次只从数据源中提取一条记录.

Connection对象

2.1 Connection连接对象

Connection对象的常用属性

属性说明
ConnectionString设置/获取应用程序连接数据字符串

Connection对象的常用方法

方法说明
void Open()用于打开与指定数据库的连接
void Close()关闭与数据库的连接

1.定义连接字符串

Data Source = 服务器名称或IP地址; Initial Catalog = 数据库名; User Id = 用户名; PWD =密码;

2.创建Connection对象

SqlConnection connection = new Sqlconnection(connString);

3.打开数据库连接

调用Connection对象的Open()方法打开数据库连接

connection.Open();

注意:在.NET Core 框架下,不会自动添加System.Data和System.Data.SqlClient的引用.需要在菜单栏,

选择""工具(T)" >"NuGet包管理器(N)";

异常处理

如何处理异常

try{
 //可能会出现异常的代码
}catch(){
//出现异常后进行的处理代码
}finally{
//不管是否出现异常都需要执行的代码
}

Command对象

command对象概述

执行返回单条连接的select语句,如聚合函数SUM、AVG等

执行返回具有多余记录的select语句

执行DML语句,如修改、插入、删除记录等

执行DDL语句,如创建表。

创建Command对象的语句如下

SqlCommand command = new SqlCommand(String sql, SqlConnection conn);

Command对象的主要属性

属性说明
ConnectionCommand对象使用的数据库连接
CommandText要执行的SQL语句

Command对象的主要方法

方法说明
SqlDataReader ExecuteReader()执行查询命令,返回DataReader对象
Object ExecuteScalat()执行查询返回单一值,如执行COUNT(*)
int ExecuteNonQuery()用于执行非查询类操作,返回的值是本次操作所影响的行数

使用Command对象程序数据

示例:使用Command对象查找BookDB数据库用户表中是否存在用户姓名为"夏颖",密码为"123456"的用户信息。

若存在,则提醒“登录成功”,否则“失败”

class program
{
static void Main(string[] args)
{
Console.Write("请输入用户姓名:");
string userName = Console.ReadLine();
Console.Write("请输入密码:");
string password = Console.ReadLine();
string strMsg = "";
bool loginType = DBoperation.CheckUserLogin(userName,Password,ref strMsg);
if(loginType == true){
Console.WriteLine("登录成功");
}else{
Console.WriteLine(strMsg);
}
}
}
public class DBHelper{
private const string connString ="Data source = .; Initial Catalog = BookDB; User ID =sa; PWD = 123456";
public static bool CheckUserLogin(string userName,string password, ref string strMsg)
{
SqlConnection conn = new SqlConnection(ConnString);
try{
//创建SQL语句
string strsql = $"语句";
conn.Open();
//创建Command命令
SqlCommand comm = new SqlCommand(strSql, conn);
int iRet = (int)comm.ExecuteScalar();
if(iRet>=1)
{
strMsg = "用户姓名或者密码错误!";
return false;
}else{
return true;
}
}
catch(Exception){
    strMsg = "发生异常!";
    return false;
}
finally{
    //关闭数据库连接
    conn.Close();
}
​
}
}

使用Command对象操作数据

向数据库中插入一条数据或者修改、删除某条数据。可以使用Command对象的ExecuteNoQuery()方法实现。

ExecuteNonQuery()方法用于执行非查询类的SQL语句,如update、delete、insert,它的返回值是受SQL语句影响的记录行数。使用ExecuteNonQuery()方法的步骤如下

(1)创建Connection对象

(2)编写要执行的SQl语句

(3)创建Command对象

(4)执行ExecuteNonQuery()方法

(5)根据ExecuteNonQuery()方法的返回值进行后续的处理。若返回值小于或等于0,则说明没有记录受影响

示例:使用ExecuteNonQuery()方法实现以下功能

1.接收用户输入的图书信息,并将图书信息插入数据表中,2.接收用户输入的图书名称,删除指定的图书记录,3.接收用户输入的图书名称,删除指定的图书记录.代码如下

class progrm
{
    private const string connString = "Data Source = .; Initial Catalog = BookDB; User ID =sa; PWD =123456";
    static void Main(string[] args)
    {
        Console.WriteLine("1.添加图书");
        Console.WriteLine("2.修改图书");
        Console.WriteLine("3.删除图书");
        whlie(true)
        {
            Console.Write("请输入要操作的键:");
            string opeationType = Console.ReadLine();
            if(opeationType == "1")
            {
                console.WriteLine("================");
                console.Write("请输入图书名称:");
                string bName = console.ReadLine();
                Console.Writeline("请输入图书价格:");
                double bPrice = double.Parse(console.ReadLine());
                Console.write("请输入图书作者:");
                string bAuthor = Console.ReadLine();
                Console.Write("请输入图书分类ID:");
                string cId = Console.ReadLine();
            }
            else if(opeationType == "2")
            {
                console.WriteLine("===============");
                console.Write("请输入图书名称:");
                string bName = Console.ReadLine();
                Console.Write("请输入图书价格:");
                double bprice = double.parse(Console.ReadLine());
                ModifyBookInfoByName(BName,bPrice);
            }
            else if (opeationType == "3")
            {
                console.WriteLine("===============");
                console.Write("请输入图书名称:");
                 string bName = Console.ReadLine();
                DeleteBookInfoByName(bName);
            }
        }
        console.ReadLine();
    }
}
public static void AddBookInfo(string bName,double bPrice,string bAuthor,string CId)
{
    string sql = $"insert into BookInfo(BName,BPrice,BAuthor,CId) values('bName}','{bPrice}','{bAuthor}','{cId}')";
    sqlConnection conn = new SqlConnection(connString);
    conn.Open();
    SqlCommand cmd = new SqlCommand(sql,conn);
    int i = comm.ExecuteNOnOuery();
    if(i>0)
    {
        Console.WriteLine("添加成功");
    }else{
        console.WriteLine("添加失败");
    }
    conn.Close();
}

 类似资料: