ADO.Net连接

原创 2015年11月20日 11:37:19

连接SQLServer

  • 连接字符串:程序通过连接字符串 指定要连哪台服务器上的、哪个实例的哪个数据库、用什么用户名密码等。
  • 项目内嵌mdf文件形式的连接字符串"DataSource=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;IntegratedSecurity=True;UserInstance=True"。“.\SQLEXPRESS”表示“本机上的SQLEXPRESS实例”,如果数据库实例名不是SQLEXPRESS,则需要修改。“Database1.mdf”为mdf的文件名。
  • ADO.Net中通过SqlConnection类创建到SQLServer的连接,SqlConnection代表一个数据库连接,ADO.Net中的连接等资源都实现了IDisposable接口,可以使用using进行资源管理。
Tip:

Close:关闭以后还能打开。

Dispose:直接销毁,不能再次使用。

为什么用using,using在出了作用域以后调用Dispose,SqlConnection、FileStream等的Dispose,内部都会做这样的判断:判断有没有close,如果没有Close就先Close再Dispose。

(sqlconnection在程序中一直保持它open可以吗?对于数据库来说,连接是非常宝贵的资源,一定要用完了就close、dispose。)


SqlCommand

  • ExecuteNonQuery 返回值是执行的影响行数。
  • ExecuteScalar 方法用于执行查询,并返回查询所返回的结果集中第一行的第一列,因为不能确定返回值的类型,所以返回值是object类型。
  • ExecuteReader 执行返回多行结果集。


SQLHelper

封装一个 SQLHelper类方便使用,提供ExecuteDataTable(string sql,paramsSqlParameter[] parameters)、ExecuteNonQuery(string sql,paramsSqlParameter[] parameters)、ExecuteScalar(string sql,paramsSqlParameter[] parameters)等方法。 

网上有微软提供的最全的SQLHelper类,是EnterpriseLibrary中的一部分。


DataSet

  • 每次读取数据都创建连接、执行Command得到SqlDataReader太麻烦。
  • SqlDataReader是连接相关的,SqlDataReader中的查询结果并不是放到程序中的,而是放在数据库服务器中,SqlDataReader只是相当于放了一个指针(游标),只能读取当前游标指向的行,一旦连接断开就不能再读取。这样做的好处就是无论查询结果有多少条,对程序占用的内存都几乎没有影响。
  • SqlDataReader对于小数据量的数据来说带来的只有麻烦,优点可以忽略不计。ADO.Net中提供了数据集的机制,将查询结果填充到本地内存中,这样连接断开、服务器断开都不影响数据的读取。
  • DataSet dataset = new DataSet(); SqlDataAdapter adapter = newSqlDataAdapter(cmd); adapter.Fill(dataset);
  • SqlDataAdapter是DataSet和数据库之间沟通的桥梁。数据集DataSet包含若干表
  • DataTable,DataTable包含若干行DataRow。
  • foreach (DataRow row in dataset.Tables[0].Rows)row["Name"]。


DataSet的更新

  • 可以更新行row["Name"] ="yzk"、删除行datatable.Rows.Remove()、新增行datatable.NewRow()。这一切都是修改的内存中的DataSet,没有修改数据库
  • 可以调用SqlDataAdapterUpdate方法将对DataSet的修改提交到数据库,Update方法有很多重载方法,可以提交整个DataSet、DataTable或者若干DataRow。但是需要为SqlDataAdapter提供DeleteCommand、UpdateCommand、InsertCommand它才知道如何将对DataSet的修改提交到数据库,由于这几个Command要求的格式非常苛刻,因此开发人员自己写非常困难,可以用SqlCommandBuilder自动生成这几个Command,用法很简单:newSqlCommandBuilder(adapter)。查看生成的Command(没有直接赋值给SqlDataAdapter,看SqlCommandBuilder的)。SqlCommandBuilder要求表必须有主键。
  • 通过DataRow的RowState可以获得行的状态(删除、修改、新增等);
  • 调用DataSet的GetChanges()方法得到变化的结果集,降低传递的资源占用。


弱类型DataSet的缺点

  • 只能通过列名引用,dataset.Tables[0].Rows[0][“Age”],如果写错了列名编译时不会发现错误,因此开发时必须要记着列名。
  • int age =Convert.ToInt32(dataset.Rows[0][“Age”]),取到的字段的值是object类型,必须小心翼翼的进行类型转换,不仅麻烦,而且容易出错。
  • 将DataSet传递给其他使用者,使用者很难识别出有哪些列可以供使用
  • 运行时才能知道所有列名,数据绑定麻烦,无法使用Winform、ASP.Net的快速开发功能。
  • 自己动手写强类型DataSet(类型化DataSet,TypedDataSet),创建继承自DataSet的PersonDataSet类,封装出int?Age等属性和bool IsAgeNull等方法,向PersonDataSet中填充。


可空数据类型

  • C#中值类型(int、Guid、bool等)是不可以为空的,inti=null是错误的,因此int、bool等这些类型不能表示数据库中的“Null”。因此C#提供了“可空类型”这种语法,只要在类型后加?就构成了可空的数据类型,比如int?、bool?,这样int? i=null就可以了。解决数据库中int可以为null,而C#中int不能为null的问题。
  • 判断可空类型是否为空,i==null或者i.HasValue;
  • 得到可空变量的值,int i1=(int)i.Value或者int i1=i.Value。
  • 类型转换:不可空类型赋值给可空类型无需显式转换(一定成功),可空类型赋值给不可空类型则需显式转换(不一定成功)。



版权声明:本文为博主原创文章,未经博主允许不得转载。

ADO.NET操作MySQL数据库

前言        ADO.NET包括5大对象,分别是Connection、Command、DataReader、DataSet、DataAdapter,使用ADO.NET访问数据库有两个步骤:建立数...
  • zh15732621679
  • zh15732621679
  • 2016年12月12日 16:44
  • 2764

ado.net连接数据库的用法

一、简单介绍ADO.NET System.Data:DataTable,DataSet,DataRow,DataColumn,DataRelation,Constraint System.Data...
  • tianfeng1208
  • tianfeng1208
  • 2014年08月17日 17:27
  • 1106

ado.net将数据库连接字符串放入配置文件中

配置文件: App.config
  • JunLinDiKu
  • JunLinDiKu
  • 2014年05月15日 17:11
  • 1201

ADO.Net连接不同数据库

1. Access 连接字符串:  ----------------------- Access 2007 ------------------------- //无密码的连接字符串  --Map...
  • songjuntao8
  • songjuntao8
  • 2014年02月28日 14:07
  • 857

两种数据访问方式:从ADO 到ADO.NET

电脑最大的好处就是可以帮助人处理大量数据,由此离不开对数据库的访问,先看看最近在做ASP.NET例子的时候经常用到的ADO.NET的数据库访问方式。...
  • u010927640
  • u010927640
  • 2016年03月13日 17:17
  • 3180

ADO.Net读取配置文件中的连接字符串

ADO.Net读取配置文件中的连接字符串              这些天一直在学习ADO.Net的知识点,我对程序和数据库的连接字符串的学习有了一点新的知识,和大家一起分享一下:       ...
  • haiyan_cf
  • haiyan_cf
  • 2013年02月19日 20:30
  • 4557

ADO 与ADO.NET两种数据访问方式区别。

1. ADO与ADO.NET简介   ADO与ADO.NET既有相似也有区别,他们都能够编写对数据库服务器中的数据进行访问和操作的应用程序,并且易于使用、高速度、低内存支出和占用磁盘空间较少,支持用...
  • lvjin110
  • lvjin110
  • 2013年09月06日 11:11
  • 1469

VS C# ADO.NET代码连接Access数据库

在Visual Studio2013 C#中以编程方式操作Access数据库,一般使用OleDb进行连接: 1.首先添加两个引用(使用using): using System.Data.OleDb; ...
  • c1481118216
  • c1481118216
  • 2016年05月31日 00:50
  • 3614

ADO.NET两种连接模型简介及增删改查实例

ADO.NET支持两种访问数据的模型:无连接模型和连接模型         无连接模型:将数据下载到客户机器上,并在客户机上将数据封装到内存中,然后可以像访问本地关系数据库一样访问内存中的数据(例如D...
  • songyi160
  • songyi160
  • 2016年05月26日 17:50
  • 787

ADO.NET操作数据库(二)

核心内容:SqlHelper的封装、配置文件的使用、事件监视器、ado.net数据库连接池、可变参数、异常捕获、SQL漏洞注释攻击、使用带参数的sql语句、本文中出现的类的用法。 一:关于SqlHel...
  • chenrushui
  • chenrushui
  • 2016年10月30日 18:31
  • 1225
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ADO.Net连接
举报原因:
原因补充:

(最多只允许输入30个字)