ADO.NET详解----核心对象的使用
一、Connection对象
指定某个具体数据源以及提供登陆方式及用户名与密码。
Connection对象的主要成员:
1、ConnectionString属性:连接字符串,指定要操作的数据库以及登录方式和用户名密码。
连接字符串的两种配置过程:
利用ConnectionString直接在应用程序中配置。
利用配置文件配置。在WINFORM中利用App.config文件配置;在WEB中利用web.config文件配置。
2、open()方法:打开与数据库的连接
若在连接数据库过程中配置连接字符串错误,则在打开是会抛出异常。
3、close()方法:数据访问完成后关闭连接
连接数据库的步骤:
1、定义连接字符串
(1)使用SQL用户名,密码验证
Data Source=服务器名称;Initial Catalog=数据库名;User ID=用户名;Pwd=密码(若没有密码,可省略)
(2)使用WINDOWS身份验证
Data Source=服务器名;Initial Catalog=数据库名;integrated security=sspi;
2、创建Connection对象
SqlConnection Connection = new SqlConnection(ConnString);
其中ConnString为连接字符串
3、打开与数据库的连接
Connection.Open();
源代码
(1)添加应用程序配置文件(注意不要修改文件名称App.config),在configuration代码中输入一下配置代码
1
2
3
4
5
|
<configuration> <connectionString> <add name= "MyConStr" ConnectionString=Data Source=服务器名称;Initial Catalog=数据库名;User ID=用户名;Pwd=密码> </connectionString> </configuration> |
在代码窗口下添加引用system.configuration,在窗口中输入一下代码:
1
2
3
4
5
6
7
|
public string MyConnString { get { return system.ConfigurationMnager.ConnectionStrings[ "MyConStr" ].ConnnectionString.tostring } } |
以上方法便可以通过访问配置文件节点的方法连接数据库。
(2)
直接在代码框中输入以下代码,便可以直接连接数据库:
1
2
3
4
5
6
7
|
public string MyConnString { get { return "Data Source=服务器名称;Initial Catalog=数据库名;User ID=用户名;Pwd=密码" } } |
二、Command对象
执行命令并从数据源中返回结果。其命令的内容可以是Sql语句或者是一个存储过程。Command命令语句可以把Sql语句或者是存储过程通过connection的连接发送给数据源(数据库服务器),然后由数据库服务器执行这些命令,最后再把这些命令的结果通过Connection返回给应用程序。
Command对象的主要成员:
1、Connection属性:Command对象使用的数据连接。
2、CommandText属性:执行SQL语句(增、删、查、改)。
3、ExecuteNonQuery()方法:执行不返回行的语句,如update。
4、ExecuteReader()方法:返回DataReader对象,查询结果直接存放在DateReader中,但是DataReader的实例化不是通过NEW语句实现,而是通过ExcuteReader方法来实现。
5、ExcuteScalar:返回单个值(第一行第一列)。
使用Command步骤:
1、创建数据库连接。
2、定义SQL语句。
3、创建Command对象。
4、执行命令。
两种实例化连接对象的方法:
(1)SqlConnection conn = new SqlConnection(MyConStr);
(2)SqlConnection conn = new SqlConnection();
conn.ConnectionString = MyConString;
源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public int ExcuteSQLReturnInt( string sql) { SqlConnection conn = new SqlConnection(MyConStr); try { SqlCommand cmd = new SqlCommand(sql,conn) //或者cmd.Connection = conn; //cmd.CommandText=sql if (conn.state==ConnectionState.close) { conn.Open(); } int count = cmd.ExcuteNonQuery(); return count; } catch (Exception ex) { return 0; } finally { conn.close(); conn.dispose(); } } |
1
|
注:因为客户端传来的sql语句有可能存在语法问题或者存在注入攻击等问题,所以我们可以用 try catch 来抛出异常。 |
若在sql语句中存在参数,则代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
public int ExcuteSQLReturnInt( string sql,SqlParameter[] pars) { SqlConnection conn = new SqlConnection(MyConStr); try { SqlCommand cmd = new SqlCommand(sql,conn) //或者cmd.Connection = conn; //cmd.CommandText=sql if (conn.state==ConnectionState.close) { conn.Open(); } if (pars!= null &&pars.Length>0) { foreach (SqlParameter p in pars) { cmd.Parameters.Add(p); } } int count = cmd.ExcuteNonQuery(); return count; } catch (Exception ex) { return 0; } finally { conn.close(); conn.dispose(); } } |
三、DataAdapter 数据适配器对象
通过DataAdapter可以将数据库中的数据传输到DataSet中,相当于数据运输的工具。
注:使用DataAdapter前必须要完成Connection的连接工作。
Dataadapter主要的属性和方法:
1、SelectCommand属性:从数据库检索数据的Command对象。
2、Fill()方法:向DataSet中的表填充数据。
3、update()方法:将DataSet中的数据提交到数据库中。
使用DataAdapter对象填充DataSet数据集的步骤:
1、创建DataAdapter对象并且使用Connection连接数据源。
SqlDataAdapter对象名 = new SqlDataAdapter(查询所用sql语句,数据库连接)
2、使用Fill()方法填充DataSet中的表
DataAdapter对象.fill(数据集对象,"数据表名称字符串")
注:若无数据表名称,则会把数据默认放到数据集对象的第一个表中。
源代码:
1
2
3
4
5
6
7
8
9
|
public DataSst SelectSqlReturnDataSet( string sql) { SqlConnection conn = SqlConnection(MyConnString); SqlAdapter sda = new SqlDataAdapter(sql,conn); DataSet ds = new DataSet(); sda.fill(ds); return ds; } |
若Sql查询语句中含有参数,则修改代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public DataSst SelectSqlReturnDataSet( string sql,SqlParameter[] pars) { SqlConnection conn = SqlConnection(MyConnString); SqlAdapter sda = new SqlDataAdapter(sql,conn); if (pars!= null &&pars.Length>0) { foreach (SqlParameter p in pars) { sda.SelectCommand.Parameters.add(p); } } DataSet ds = new DataSet(); sda.fill(ds); return ds; } |
若传输的既可能是Sql语句也可能是存储过程,则修改代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public DataSst SelectSqlReturnDataSet( string sql,SqlParameter[] pars,CommandType type) { SqlConnection conn = SqlConnection(MyConnString); SqlAdapter sda = new SqlDataAdapter(sql,conn); if (pars!= null &&pars.Length>0) { foreach (SqlParameter p in pars) { sda.SelectCommand.Parameters.add(p); } } sda.SelectCommand.CommandType = type; DataSet ds = new DataSet(); sda.fill(ds); return ds; } |
四、DataReader对象
用于在数据库中读取数据,一般用于读取一条数据(也可读取多条)。
DataReader的主要属性和方法:
1、HasRows属性:是否返回了结果。
2、Read()方法:前进到下一条记录,返回结果为布尔值,读取之后若下一行有值则返回为true,若下一行没有值则返回false。
3、close()方法:关闭DataReader对象
使用DataReader读取数据的基本步骤:
1、创建Command对象。
2、调用ExcuteReader()创建DataReader对象。
3、调用DataReader的Read()方法逐行读取数据。
4、读取某列的数据:(type)dataReader[]
获取某列的值可以在上面的方括号中用以下两种表是方法:
(1)指定列的索引,从0开始
(2)指定列名
5、关闭DataReader对象
注:(1)DataReader是直接将数据库中的数据读取到用户的客户端(应用程序或者某个控件上)
(2)DataReader使用后必须关闭
源代码
1
2
3
4
5
6
7
8
9
10
11
|
public SqlDataReader SelectSqlReturnDataReader( string sql) { SqlConnection conn = new SqlConnection(MyConnString); SqlCommand cmd = new SqlCommand(sql); if (conn.ConnectionState.closed()) { conn.Open(); } SqlDataReader reader = cmd.ExcuteReader(CommandBehavior.CloseConnection); return reader; } |
注:
1
|
CommandBehavior.CloseConnection 可以自动在应用程序读取完数据之后自动关闭连接。 |
五、DataSat
DataSet数据集可以简单理解为一个临时数据库,可以将数据源的数据保存在内存中并且它是独立于任何数据库的。DataSet是由若干个DataTable组成的。
创建DataSet基本步骤:
创建一个DataSet,可以指定一个数据集的名称,如果不指定数据集的名称则系统默认为"NewDataSet"。
DataSet 数据集对象 = new DataSet("数据集的名称字符串")
源代码
public DataTable SelectSqlReturnDataTable( string sql,SqlParameter[] pars,CommandType type) { SqlConnection conn = new SqlConnection(MyConnString); SqlDataAdapter sda = new SqlDataAdapter(sql,conn); DataTable dt = new DataTable; sda.Fill(dt); return dt; } |
或者
1
2
3
4
5
6
7
8
|
public DataTable SelectSqlReturnDataTable( string sql,SqlParameter[] pars,CommandType type) { SqlConnection conn = new SqlConnection(MyConnString); SqlDataAdapter sda = new SqlDataAdapter(sql,conn); DataSet ds = new DataSet(); sda.Fill(ds, "myTable" ); //其中myTable为ds中的一张表 return ds.tables[ "myTable" ]; } |
ADO.NET详解----核心对象的使用的更多相关文章
- js对象详解(JavaScript对象深度剖析,深度理解js对象)
js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...
- Struts功能详解——ActionMapping对象
Struts功能详解——ActionMapping对象 ActionMapping描述了struts中用户请求路径和Action的映射关系,在struts中每个ActionMapping都是通过pat ...
- php开发面试题---php面向对象详解(对象的主要三个特性)
php开发面试题---php面向对象详解(对象的主要三个特性) 一.总结 一句话总结: 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸 ...
- dom对象详解--document对象(二)
dom对象详解--style对象 style对象 style对象和document对象下的集合对象styleSheets有关系,styleSheets是文档中所有style对象的集合,这里讲解的 ...
- dom对象详解--document对象(一)
document对象 Document对象代表整个html文档,可用来访问页面中的所有元素,是最复杂的一个dom对象,可以说是学习好dom编程的关键所在. Document对象是window对象的一 ...
- BOF和EOF的详细解释 ADO的三个核心对象
使用ADO连接数据库进行查一个列表询的时候,数据库将查询结果返回查询端,在查询端的内存里面就会有一个列表,这个列表存放的就是查询的结果.这个内存中的列表就是数据集.在你的程序里面rs就是标识的这个数据 ...
- 抓到 Netty 一个隐藏很深的内存泄露 Bug | 详解 Recycler 对象池的精妙设计与实现
欢迎关注公众号:bin的技术小屋,如果大家在看文章的时候发现图片加载不了,可以到公众号查看原文 本系列Netty源码解析文章基于 4.1.56.Final版本 最近在 Review Netty 代码的 ...
- 18.Java 封装详解/多态详解/类对象转型详解
封装概述 简述 封装是面向对象的三大特征之一. 封装优点 提高代码的安全性. 提高代码的复用性. "高内聚":封装细节,便于修改内部代码,提高可维护性. "低耦合&quo ...
- ASP.NET Core微服务 on K8S学习笔记(第一章:详解基本对象及服务发现)
课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务1:课程介绍 任务2:Labels and Selectors 所有资源对 ...
随机推荐
- 让两个Div并排显示
一.使用display的inline属性 <div style="width:300px; height:auto; float:left; display:inline"& ...
- J2SE知识点摘记(十四)
1. 字符流 Reader是定义java的流式字符输入模式的抽象类,该类所有方法在出错的情况下都将引发IOException异常. Int read(char buffer[]) ...
- Cortex-M3学习日志(六) -- ADC实验
上一次简单的总结了一下DAC方面的知识,好吧,这次再来总结一下ADC方面的东东.ADC即Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器.现实世界是由模 ...
- 使用MIDAS访问远程Access数据库
使用MIDAS访问远程Access数据库 Allen Tao(http://blog.csdn.net/allentao/) 2005-5-3 本文源码下载 访问远程数据库常用的办法是 ...
- C++中实现链表的删除和颠倒
MFC工程中关于链表的操作 1.对于给定的整数n,编写算法删除链表中第n个节点,该链表的第一个节点由first指向. 由于C++中没有关于node的标准头文件,要先手动定义node类,此处只定义了简单 ...
- C,C++经典(程序、错误程序)
1,程序 未执行完错误的return 0
- #include <thread>
1 detach 脱离当前主线程,自由执行,乱序; 2 join() 等待模式,执行完再执行下一个 3 std::this_thread::get_id() 获取当前线程编号 4 std::threa ...
- js判断终端是手机还是电脑
$(function(){ function browserRedirect() { var sUserAgent= navigator.userAgent.toLowerCase(); var bI ...
- JBoss+Ant实现EJB无状态会话bean实例
EJB分为session bean.entity bean.message-driven bean,session bean又分为无状态会话bean和有状态会话bean. session bean负责 ...
- 设计模式- 主动对象(Active Object)
译者注:1.对象分为主动对象和被动对象,主动对象内部包含一个线程,可以自动完成动作或改变状态,而一般的被动对象只能通过被其他对象调用才有所作为.在多线程程序中,经常把一个线程封装到主动对象里面.2.在 ...