机房重构系列——ADO.NET访问数据库

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 机房重构系列——ADO.NET访问数据库

一、概念

①、什么是ADO.NET

是一组用于和数据源进行交互地面向对象类库,可以处理数据源是多样的


②、ADO.NET与ADO的关系?

ADO使用的是OLE DB接口并基于微软的COM技术,而ADO.NET有自己的ADO.NET接口并基于微软的.NET体系架构

二、ADO.NET的核心组成

System.Data命名空间提供了不同的ADO.NET类,包含了两组重要的类:一组负责处理软件内部的实际数据(DataSet),一组负责与外部数据系统通信(Data Provider)


①System.Data  → DataTable,DataSet,DataRow,DataColumn,DataRelation,Constraint,DataColumnMapping,DataTableMapping
②System.Data.Coummon     → 各种数据访问类的基类和接口
③System.Data.SqlClient   → 对Sql Server进行操作的数据访问类
  主要有:   a) SqlConnection            → 数据库连接器
            b) SqlCommand               → 数据库命名对象
            c) SqlCommandBuilder        → 生存SQL命令
            d) SqlDataReader            → 数据读取器
            e) SqlDataAdapter           → 数据适配器,填充DataSet
            f) SqlParameter             → 为存储过程定义参数
            g) SqlTransaction           → 数据库事物

System.Data.SqlClient → 对Sql Server进行操作的数据访问类

System.Data.SqlClient命名空间

一、Connection连接对象

Connection对象数据库连接对象,功能就是负责对数据源的连接

以SQLServer数据库为例

1.1连接字符串

基本语法:数据源(Data Source)+数据库名称(Initial Catalog)+用户名(User ID)+密码(Password)

1.1.1、SQL Server连接字符串

标准安全连接

Data Source=;Initial Catalog=myDataBase;Userid=myUsername;Password=myPassword: 或者

Server=myServerAddress;Database=myDataBase;Userid=myUsername;Password=myPassword;Trusted_Connection=False;

可信连接:

Data Source =myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;或者

Server=myServerAddress;Database=myDatabase;Trusted_Connection=True;

1.2、连接到数据库

Connection对象有两个重要的属性:
(1)ConnectionString:表示用于打开SQL Server数据库的字符串

(2)State:表示Connection的状态,有Closed和OPen两种状态

Connection对象有两个重要的方法:

(1)Open()方法:指示打开数据库;

(2)Close()方法:指示关闭数据库

//创建连接对象1
using (SqlConnection conn1 = new SqlConnection("连接字符串"))    
{        
    conn1.Open();       
}

二、Command对象

以SQLServer为例

数据库命令对象,Command对象主要执行包括添加、删除、修改、查询数据的操作命令。
1. SqlCommand常用的构造函数

Sqlcommand(): 初始化SqlCommand类的新的实例

SqlCommand(String): 使用查询的文本初始化SqlCommand类的新实例
2. 常用属性

CommandText:获取或设置要在数据源中执行的 Transact-SQL 语句、表名或存储过程。

CommandType:获取或设置一个值,该值指示解释 CommandText 属性的方式。Parameters:获取SqlParameterCollection

3. 常用方法

CreateParameter():创建SQLParameter对象的新实例。
ExcuteReader():将Command Text发送到Connection,并生成SqlDataReader。

ExecuteReader用于实现只进只读的高效查询

ExcuteReader:返回一个sqlDataReader对象,可以通过这个对象来检查查询结果,从结果中取一行之后移动到零一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾


使用ExecuteReader实现数据查询

//查询
        private void btnQuery_Click(object sender, EventArgs e)
        {
            //创建连接对象,并使用using释放(关闭),连接用完后会被自动关闭
            using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=sa;database=MyCar"))
            {
                //打开连接
                conn.Open();
                //将执行的sql
                String sql = "select Id,Title,Speed,Info from Car";
                //创建命令对象,指定要执行sql语句与连接对象conn
                SqlCommand cmd = new SqlCommand(sql, conn);
                //执行查询返回结果集
                SqlDataReader sdr = cmd.ExecuteReader();
                //下移游标,读取一行,如果没有数据了则返回false
                while (sdr.Read())
                {
                    Console.WriteLine("编号:" + sdr["Id"] + ",车名:" + sdr["Title"] + ",速度:" + sdr["Speed"]);
                }
            }
        }

ExecuteNonQuery():执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库增加、更新、删除操作、注意查询的时候不是调用这个方法。用于完成insert、delete、update操作。

//新增
        private void btnAdd_Click(object sender, EventArgs e)
        {
            //创建连接对象,并使用using释放(关闭),连接用完后会被自动关闭
             using (SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=sa;database=MyCar"))
            {
                 //打开连接
                conn.Open();
                 //将执行的sql
                String sql = "INSERT INTO Car([Title] ,[Speed] ,[Info]) VALUES('奇瑞' ,190,'国产轿车')";
                 //创建命令对象,指定要执行sql语句与连接对象conn
                SqlCommand cmd = new SqlCommand(sql,conn);
                 //执行,返回影响行数
                int rows=cmd.ExecuteNonQuery();
                if (rows > 0) MessageBox.Show("新增成功!");
            }
            //using 相当如下代码,确保连接对象一定会关闭
            //SqlConnection conn=null;
            //try
            //{
            //    conn=new SqlConnection("server=.;uid=sa;pwd=sa;database=MyCar");
            //}
            //finally
            //{
            //    conn.Close();
            //}
        }

三、SqlParameter

以SQLServer为例

表示SqlCommand的参数,或者其与DataSet列的映射,此类不能被继承

构造函数

SqlParameter(): 初始化SqlParameter类的新实例

SqlParameter(String,SqlDbType): 初始化提供的参数名称和数据类型初始化SqlParameter类的新实例


常用属性

Value: 获取或设置参数的值

TypeName:获取或设置表值参数的类型名称


常用方法

ToString():获取一个包含ParameterName的字符串

四、SqlDataReader

以SQLServer为例

提供一种从SQL Server 数据库中读取只进的行流方式。此类不能被继承
1. 常用方法

Read():让Sql DataReader 前进下一条记录。返回值为bool,如果存在多行,则为true;否则为false


GetInt32(Int 32):获取指定列的32位带符号整数形式的值。代码:public int GetInt32(int i)。


GetString(Int 32):获取指定列的字符串形式的值。代码:public string GetString(int i)。


IsDBNull(Int 32):获取一个值,该值指示列中是否包含不存在的或缺少的值。代码:public bool IsDBNull(int i)

三、System.Data 常用类

System.Data

System.Data命名空间提供对表示ADO.NET结构的类的访问,通过ADO.NET,可以生成有效管理多个数据源的数据的组件。
1.常用类

DataRow:表示Data Table中的一行数据


DataSet:表示数据中内存中的缓存


DataTable;表示内存中数据的一个表


DataTable的构造函数

DataTable();在不使用参数的情况下初始化DataTable类的新实例

DataTable(string):使用指定的表名初始化DataTable类的新实例


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
11天前
|
C#
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
|
11天前
|
人工智能 自然语言处理 API
适用于 .NET 稳定的官方OpenAI库
适用于 .NET 稳定的官方OpenAI库
|
1月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
24 1
|
11天前
|
开发框架 安全 .NET
.NET使用Moq开源模拟库简化单元测试
.NET使用Moq开源模拟库简化单元测试~
|
1月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
|
1月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
60 8
|
1月前
|
存储 开发框架 .NET
.NET 8 实现无实体库表 API 部署服务
【10月更文挑战第12天】在.NET 8中,可通过以下步骤实现无实体库表的API部署:首先安装.NET 8 SDK及开发工具,并选用轻量级Web API框架如ASP.NET Core;接着创建新项目并设计API,利用内存数据结构模拟数据存储;最后配置项目设置并进行测试与部署。此方法适用于小型项目或临时解决方案,但对于大规模应用仍需考虑持久化存储以确保数据可靠性与可扩展性。
|
1月前
|
开发者 Windows
.NET 开源扁平化、美观的 C/S 控件库
【10月更文挑战第23天】介绍了三款适用于 .NET 平台的开源扁平化、美观的 C/S 控件库:MaterialSkin 采用 Google Material Design 风格,适合现代感界面;Krypton Toolkit 提供丰富控件,界面易于定制;Fluent Ribbon Control Suite 模仿 Office 界面,适合复杂功能应用。每款控件库均附有示例代码及 GitHub 链接。
|
2月前
|
SQL 存储 关系型数据库
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
270 6
|
3月前
|
Unix Linux C#
增强用户体验:2个功能强大的.NET控制台应用帮助库
增强用户体验:2个功能强大的.NET控制台应用帮助库
下一篇
无影云桌面