简述ADO.NET的连接层
前面曾提到过ADO.NET的连接层允许通过数据提供程序的连接、命令、数据读取器对象与数据
库进行交互。当想连接数据库并且使用一个数据读取器对象来读取数据时.需要实现下面的几个步骤
* 创建、配置、打开连接对象。
* 创建、配置一个命令对象.通过构造参数或Connection 属性指定连接对象。
* 执行配置后的命令对象的 ExecuteReader()方法。
* 使用数据读取器的 Read()方法一条一条处理记录。
using (SqlConnection cn = new SqlConnection())
{
cn.ConnectionString = "server=服务器名;User ID=用户名;Password=密码;database=数据库名";
cn.Open();
string sql = "select top 10 * from TCustomer";
SqlCommand cmd = new SqlCommand(sql, cn);
using (SqlDataReader adater = cmd.ExecuteReader())
{
while (adater.Read())
{
Console.WriteLine(adater["CustomerId"]);
}
}
}
使用连接对象
使用数据提供程序需要做的第一步就是使用连接对象(前面说过从DbConnection继承)去和数据库建立一个会话。.NET连接对象需要称一个符合一定格式的连接字符今进行创建。通常它包含了几对名称/值的信息并且通过分号分割。这些信息用来确定你想要连接的计算机名、必要的安全配置、机器上数据库的名字和其他一些数据提供程序特有的信息。
Inltlal cata1og 名涉及我们需要建立会话的数据库。 DataSource 名表示维护数据库的机器名。在这里,(local)允许我们定义一个标识来指示当前本地机器(不管这个机器的名字是什么),而\ SQL ExpRES 标识通知SQL server 提供程序:正在连接到SQL serverExpRES默认版本的安装。(如果我们在完整版本的SQL server 上创建AutoLot,就只需要写Data Source=(local))
除了这些,我们还可以提供许多表示安全资格的标识。在这里.我们设置Integrated securlty 为SSPI (等价于 true ) .它使用当前的 windows 帐户凭据作为用户身份验证。
DbConnection类型成员
* BeginTransation() 用来开始教据库事务
* ChnageDatabase() 为打开的连接更改当前教据库
* ConnectionTimeout 这个只读属性返回建立连接时终止尝试并生成错误之前所等待时间(默认15秒)如果想修改这个值,请在连接字符串中加入Connect TimeOut 片段(Connect TimeOut=30 )
* DataBase 获取连接对象的教据库名
* DataSource 获取连接时象的教据库服务器名
* GetSchema() 返回一个包含数据源结构信息的DataTable对象
* State 这个只读属性获取当前连接状态.表示为 ConnectionState 枚举形式
DbConnection类型的这些属性实际上是只读的,只有我们想在运行时得到连接的一些特征时才会去用它们。如果需要修改这些默认设置的话,必须改变连接字符串本身
使用ConnectionStringBuilder对象
ConnectionStringBuilder:连接字符串析造函数对象.通过它能使用强类型化的属性来指定名称/值对。
Console.WriteLine("*****ConnectionStringBuilder****");
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder();
sb.InitialCatalog = "数据库名";
sb.DataSource = @"服务器名";
sb.ConnectTimeout = ;
sb.IntegratedSecurity = true;
//或
string cnstr = @"Data Source=服务器名;" + "Integrated Security=SSPI;Initial Catalog=数据库名";
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(cnstr);
sb.ConnectTimeout = ;
using (SqlConnection cn = new SqlConnection())
{
cn.ConnectionString = sb.ConnectionString;
cn.Open();
}
使用连接对象
| DbCommand类型的成员 | |
| CommandTimeOut | 获取或设置在终止执行命令的尝试并生成错误之前的等待时间.默认 30秒 |
| Connection | 获取或设置此DbCommand实例使用的DbConnection |
| Parameters | 获取DbParameter对象的集合.用于参教化查询 |
| Cancel() | 取消执行命令 |
| ExecuteReader() | 执行SQL查询并返回一个数据提供程序的DbDataReader对象,以只读向前的方式访问查询结果 |
| ExecuteNonQuery() | 提交SQL语句到数据库,不会有返回值(如插入、更新、删除或创建表) |
| ExecuteScalar() | 一个轻量级版本的 EExecuteReader .用于返回一个值的查询(比如得到记录总数) |
| Prepare() | 在数据源上创建该命令的准备好(或已编译)的版本,找们知道这样一个查询的执行速度会稍微快些(特别是在你想多次执行相同查询的情况下) |
简述ADO.NET的连接层的更多相关文章
- ADO.NET 之断开连接层
定义: 使用ADO.NET断开连接层,就会使用System.Data命名空间的许多成员(主要是DataTable.DataTable.DataRow.DataColumn.DataView和DataR ...
- ADO.NET之一:连接层
ADO.NET大部分由System.Data.dll核心程序集来表示. ADO.NET类库有三种完全不听的方式来实现数据访问:连接式.断开式和通过Entity框架.连接式就是会一直占用网络资源,断开式 ...
- 简述ADO中如何使用参数化的命令对象以及增删改查,存储过程的操作
连接数据库代码: private SqlConnection con = null; public void OpenConnection(string connectionString) { con ...
- 简述ADO.NET命名空间
system.data命名空间的类型 system.data命名空间的核心成员 命名空间 作用 Constraint 表示某个DataColumn对象的约束 DataColumn 表示某个DataT ...
- ASP.NET SignalR2持久连接层解析
越是到年底越是感觉浑身无力,看着啥也不想动,只期盼着年终奖的到来以此来给自己打一针强心剂.估摸着大多数人都跟我一样犯着这样浑身无力的病,感觉今年算是没挣到啥钱,但是话也不能这么说,搞得好像去年挣到钱了 ...
- caffe之(四)全连接层
在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层.卷积操作层.pooling层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要 ...
- MySQL的三层架构之一----连接层
1.mysql的服务端可以分为三层,分别是连接层,SQL层,存储层. 2.架构图 3.连接层定义了通信server端与client协议:
- asp.net学习之ado.net(连接模式访问)
原文:asp.net学习之ado.net(连接模式访问) ado.net框架支持两种模式的数据访问: 连接模式(Connected)和非连接模式(disconnected).这一节介绍如何使用连 ...
- resnet18全连接层改成卷积层
想要尝试一下将resnet18最后一层的全连接层改成卷积层看会不会对网络效果和网络大小有什么影响 1.首先先对train.py中的更改是: train.py代码可见:pytorch实现性别检测 # m ...
随机推荐
- 使用Onenote & Evernote & VSC+Markdown构建个人笔记系统
Onenote & Evernote & VSC+Markdown构建个人笔记系统 umeowbing(转载请注明出处) 1 Why 笔记本太多,全部带着太重,查找起来也很麻烦-- 笔 ...
- 理解线程池到走进dubbo源码
引言 合理利用线程池能够带来三个好处. 第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行. ...
- 虚拟机设置静态IP配置
网关 虚拟机的ip设置 vi /etc/sysconfig/network-scripts/ifcfg-eth0 重启网卡 service network restart 测试 ping www.b ...
- Asp.NetCore轻松学-使用Docker进行容器化托管
前言 没有 docker 部署的程序是不完整的,在写了 IIS/Centos/Supervisor 3篇托管介绍文章后,终于来到了容器化部署,博客园里面有关于 docker 部署的文章比比皆是,作为硬 ...
- Android版数据结构与算法(二):基于数组的实现ArrayList源码彻底分析
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 本片我们分析基础数组的实现--ArrayList,不会分析整个集合的继承体系,这不是本系列文章重点. 源码分析都是基于"安卓版" ...
- java基础( 九)-----深入分析Java的序列化与反序列化
序列化是一种对象持久化的手段.普遍应用在网络传输.RMI等场景中.本文通过分析ArrayList的序列化来介绍Java序列化的相关内容.主要涉及到以下几个问题: 怎么实现Java的序列化 为什么实现了 ...
- RxJava操作符的简单使用
一.准备工作在app的build.gradle文件下的dependencies中添加依赖: compile 'io.reactivex:rxjava:1.3.0' compile 'io.reacti ...
- java多线程的几种状态
java线程状态在Thread中定义,源码中能看到有个枚举State,总共定义了六种状态: NEW: 新建状态,线程对象已经创建,但尚未启动 RUNNABLE:就绪状态,可运行状态,调用了线程的sta ...
- .NET Framework和 .Net Core实现不一致的API之 `EmailAddressAttribute`
.NET Framework和 .Net Core实现不一致的API之 EmailAddressAttribute Intro 现在我们的类库项目大多是 NETStandard2.0 项目,但是 ne ...
- AD用户属性:UserPrincipalName与SamAccountName的差别
在我们日常工作中或者日常针对AD进行自动化开发的过程中,我们都会对UserPrincipalName与SamAccountName产生疑惑,毕竟很多时候大家都把这两个属性值理解为同一个概念,至于为什么 ...