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。
  • 类型转换:不可空类型赋值给可空类型无需显式转换(一定成功),可空类型赋值给不可空类型则需显式转换(不一定成功)。



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

相关文章推荐

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

在Visual Studio2013 C#中以编程方式操作Access数据库,一般使用OleDb进行连接: 1.首先添加两个引用(使用using): using System.Data.OleDb; ...

ADO.NET 使用Connection对象连接数据库实现用户登录

今天想总结一下上周老师讲的用Connection对象连接字符串实现登录的demo。 也想将代码熟悉一下。 首先在sql server中建好表,我只设置了两个字段 :usrName和psd。接下来在...
  • Jiojio_
  • Jiojio_
  • 2017年03月04日 17:34
  • 174

20160229 ADO.NET连接SQL Server数据库(SqlHelper类)

一、首先需要在App.config文件中添加如下红色文字         如果是免费版的SQL Server,那么Data Source=10.205.1.16\sqlexpress(付费...

数据库连接+SQL语句+存储过程+ADO.Net调用存储过程

using System.Data;-----------Use ADO.net namespace using System.Data.SqlClient;-------------Use SQL...
  • ysghyy
  • ysghyy
  • 2011年09月28日 19:48
  • 221

黑马程序员_ADO.NET数据库连接

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 神奇代码:用来判断所要操作的数据...

VS2013 ADO.NET 连接 SQLEXPRESS

开发环境:VS2013 + SQLEXPRESS 出现问题:网站 Web.config 已经配置了connectionString,但是不知道怎么用代码连接 解决方案:ADO.NE...

ADO.NET与外部数据库连接及查询等基本操作

建立与数据库连接:**需要连接字符串,用到System.Data.SqlClient类库。 方法: 使用一个类构建SQL Server 连接字符串 创建SqlconnectionStringBui...

关于ADO.NET连接池 - 深蓝居 - 博客园

前几天同事问我一个问题,一种CS架构的程序,直接把SQL Server作为服务端,每个客户端直接连接数据库操作,如果客户端打开的数量过多时SQL Server的连接数将会特别高,数据库端形成性能瓶颈,...

利用ADO.NET连接Excel数据库,并执行相应的操作

利用ADO.NET连接Excel数据库,并执行相应的操作: 创建表格,读取数据,写入数据,获取工作簿中的所有工作表名称。...
  • zfybs
  • zfybs
  • 2015年03月08日 11:51
  • 262

ADO.NET连接mysql

步骤/方法 学习ADO.NET时,你可能会遇到ADO.NET连接MySQL问题,这里将介绍ADO.NET连接MySQL问题的解决方法,在这里拿出来和大家分享一下。Mysql安装好以后,点属性,然...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ADO.Net连接
举报原因:
原因补充:

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