目录
1.1ADO.NET简介
ADO.NET时一组想.NET程序员公开数据访问服务的类。用于支持对Microsoft SQL Server 和 XML等数据源进行访问。
connection对象:提供与数据库的连接功能
Command对象:用于返回数据、修改数据、运行存储过程、发送以及检索参数信息等数据库命令
DataReader对象:用于通过Command对象从数据库中检索信息;
DataAdapter对象:用于连接Dataset对象和数据源,与DataReader相似,但速度慢于它;使用Command对象在数据源中执行命令,意见将数据加载到DataSet中,并确保DataSet中的数据的更改与数据源保持一致;
DataSet对象:是ADO.NET的核心,是一个数据库容器,可以把它当做是一个存放在内存中的数据库,它支持分布式数据方案。
1.1.1ADO.NET体系结构
在ADO.NET中,用于访问和数据库的两个主要组件是.NET Framework 数据提供程序和数据集DataSet.
1、.NET Framework数据提供程序
是提供程序是专为数据操作设计的组件,用于处理不同的数据源,支持访问特定数据库、执行SQL命令和检测结果。
System.Date //提供对表示ADO.NET结构的类的访问
System.Date.SqlClient //SQL服务器数据提供程序,用于访问SQL Server数据库的类集合
System.Date.Odbc //ODBC数据提供程序
System.Date.OleDb //OLE DB数据提供程序
System.Date.OracleClient //Oracle数据提供程序
2、数据集DataSet
是专为独立于所有数据源的数据访问设计的,他在支持ADO.NET的断开式、分布式数据方案中起着至关重要的作用。
1.2Connection对象
1.2.1Connection对象的概述
它是用于连接对象,主要功能是建立与物理数据库的连接。
说明:根据使用数据库的不同,引用不同的命名空间,然后通过命名空间中的Connection对象连接类连接数据库。例如,连接SQL Server数据库,首先要通过Using System.data.SqlClient命令引用SQL 数据提供程序,然后才能调用空间下的SqlConnection类连接数据库
枚举值 | 说明 |
Broken | 与数据源的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接,然后重新打开 |
Closed | 连接处于关闭状态 |
Connecting | 链接对象正在与数据源连接 |
Executing | 连接对象正在执行命令 |
Fetching | 连接对象正在检索数据 |
Open | 连接处于打开状态 |
1.2.2连接数据库
设置连接字符串
1、SQL Server身份验证连接字符串,语法如下
server=服务器名;database=数据库名;uid=用户名;pwd=密码
2、Windows身份验证连接字符串
server=服务器名;database=数据库名;Integrated Security=true
3、创建Connection对象
SqlConnection 连接对象名=new SqlConnection("连接字符串")
4、打开和关闭连接
当对数据库操作完毕后,要关闭与数据库的连接,释放占用的资源。可通过Close或Dispose方法关闭。
Close:关闭一个连接
Dispose:不仅关闭一个连接,还可以清理连接所占用的资源。
注:Dispose方法关闭连接,就不可以再次直接使用Open方法打开,必须重新初始化连接再打开
连接对象名.Open() //打开连接
连接对象名.Close() //关闭连接
连接案例如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace 连接测试
{
internal class Program
{
static void Main(string[] args)
{
//定义数据库连接字符串
string SQLname = "server=.;database=Promise;uid=sa;pwd=******";
//创建连接对象
SqlConnection conn = new SqlConnection(SQLname);
//打开数据库连接
conn.Open();
//检测数据库连接是否打开
if (conn.State == ConnectionState.Open)
{
Console.WriteLine("连接成功");
}
//关闭数据库
conn.Close();
}
}
}
1.3Command对象执行SQL语句
1.3.1Command对象的简介
Command对象是一个数据命令对象,主要功能是向数据库发送查询、更新、删除、修改操作的SQL语句。
1.3.2Command对象的属性
Command对象有3个重要的属性,分别是Connection属性、CommandText属性和CommandType属性
Connection属性:用于设置Sqlcommand使用的SqlConnection。
CommandText属性:用于设置要对数据源执行的SQL语句或存储过程
CommandType属性:用于设置指定CommandText类型。它的属性值是CommandType枚举值。如下:
StoreProcedure:存储过程的名称
TableDirect:表的名称
Text:SQL文本命令
string server = "server=.;database=Promise;uid=sa;pwd=********";
SqlConnection conn = new SqlConnection(server);
conn.Open();
if (conn.State == ConnectionState.Open)
{
Console.WriteLine("连接成功");
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn; // 设置connection属性
//设置commandtext属性,设置sql语句
cmd.CommandText = "select * from qq";
//设置CommandTyoe属性为text
cmd.CommandType = CommandType.Text;
}
else
{
Console.WriteLine("连接失败");
}
也可以写作
string sql="select * from stu" //创建DML语句
sqlcommand cmd=new sqlcommand(sql,conn) //创建sqlcommand对象(命令对象)
//conn是connection对象
1.3.3Command对象的常用方法
Command对象的常用方法
方法 说明 ExecuteNonQuery 执行T-SQL语句并返回受影响的行数(可用于判断命令是否执行成功) ExecuteReader 执行查询命令,并返回DataReader对象(读取查询的值) ExecuteScalar 执行查询命令,返回结果集中首行首列的值(一般在聚合函数时使用)
1.4DataReader对象
1.4.1DataReadader对象概述
是数据读取器对象,提供只读、向前的游标,如果应用程序需要每次从数据中取出最新的数据,或者只是需要快速读取数据,并不需要修改数据,那么就可以使用DataReader对象进行读取。
.NET Framework数据提供程序 | 数据读取对象 |
System.Date.SqlClient 命名空间下 | SqlDataReader |
System.Date.OleDb 命名空间下 | OleDbDataReader |
System.Date.Odbc 命名空间下 | OdbcDataReader |
System.Date.Oracle 命名空间下 | OracleDataReader |
1.4.2判断查询结果中是否有值
可以通过SqlDataReader对象的HasRows属性获取一个值,该值指示SqlDataReader是否包含一行或多行,即判断查询结果是否有值。
参考代码
string sql="select * from name";
sqlcommand cmd = new sqlcommand(sql,conn);
sqldatareader read=cmd.ExecuteReader();
read.Read();
if(read.HasRows)
{
//有值
}
else
{
//没值
}
1.4.3DataReader对象的常用方法
方法 | 说明 |
Read | 使用DataReader前进到下一条记录,如果下一条有数据,则返回True反之为 False |
Close | 关闭DataReadder对象 |
GetName | 获取指定列的名称 |
static void Main(string[] args)
{
string promise = "server=.;database=3CDB;Integrated Security=true";
string sql1 = "select sum(price) from Products";
string sql2 = "select count(*) from Products";
SqlConnection sql = new SqlConnection(promise);
sql.Open();
SqlCommand cmd = new SqlCommand(sql1, sql);
string reader = cmd.ExecuteScalar().ToString();
cmd = new SqlCommand(sql2, sql);
string count = cmd.ExecuteScalar().ToString();
Console.WriteLine(reader+" "+count);
sql.Close();
}
static void Main(string[] args)
{
string promise = "server=.;database=3CDB;Integrated Security=true";
string sqly = "select * from admins";
SqlConnection sql = new SqlConnection(promise);
sql.Open();
SqlCommand cmd = new SqlCommand(sqly, sql);
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
string id, loginid, loginPwd, name;
id = reader["ID"].ToString();
loginid = reader["loginID"].ToString();
loginPwd = reader["loginPwd"].ToString();
name = reader["name"].ToString();
Console.WriteLine(id,loginid,loginPwd,name);
}
sql.Close();
}