.Net连接数据库的方式详解

一、C#中连接字符串常用内容

参数 说明
Provider 设置或者返回提供的连接程式的名称,仅用于OLeDbConnection对象
Connection Timeout 在终止尝试并产生异常前,等待连接到服务器的连接时间长度(以秒为单位)。默认值是15秒
Initial Catalog或Database 连接的数据库名称
Data Source或Server 连接打开时使用的SQL Server服务签名,或者Access数据库文件名(localhost或127.0.0.1)
Password或pwd Sql Server登录密码
User ID或uid Sql Server登录账户
Integrated Sercuity 决定连接是否是安全连接,可能的值有True,False和SSPI(SSPI和True是同义词)

以上的参数是不分大小写的,例如uid,UID,Uid都表示连接的数据库用户

Integrated Security参数用于本地windows验证登录时,其值应该设置为True,例如("server=localhost;database=mydb;Integrated security=true")

二、.net 数据库连接池超时问题

(1)数据库Connection Pool 连接池是什么

每当程序需要读写数据库的时候。Connection.Open()会使用ConnectionString连接到数据库,数据库会为程序建立 一个连接,并且保持打开状态,此后程序就可以使用T-SQL语句来查询/更新数据库。当执行到Connection.Close()后,数据库就会关闭当 前的连接。

但是如果我的程序需要不定时的打开和关闭连接,(比如说 ASP.Net 或是 Web Service ),例如当Http Request发送到服务器的时候、,我们需要打开Connection 然后使用Select* from Table 返回一个DataTable/DataSet给客户端/浏览器,然后关闭当前的Connection。那每次都Open/Close Connection 如此的频繁操作对于整个系统无疑就成了一种浪费。

ADO.Net Team就给出了一个比较好地解决方法。将先前的Connection保存起来,当下一次需要打开连接的时候就将先前的Connection 交给下一个连接。这就是Connection Pool。

(2)数据库Connection Pool连接池的运行方式

  • 1、当一个程序执行Connection.open()时候,ADO.net就需要判断,此连接是否支持Connection Pool (Pooling 默认为True)

​ (1)、如果指定为False, ADO.net就与数据库之间创建一个连接,然后返回给程序。

​ (2)、如果指定为 True,ADO.net就会根据ConnectString创建一个Connection Pool,然后向Connection Pool中填充Connection。填充多少个Connection由Min Pool Size (默认为0)属性来决定。例如如果指定为5,则ADO.net会一次与SQL数据库之间打开5个连接,然后将4个Connection,保存在 Connection Pool中,1个Connection返回给程序。

  • 2、当程序执行到Connection.close() 的时候。如果Pooling 为True,ADO.net 就把当前的Connection放到Connection Pool并且保持与数据库之间的连接。

同时还会判断Connection Lifetime(默认为0)属性,0代表无限大,如果Connection存在的时间超过了Connection LifeTime,ADO.net就会关闭的Connection同时断开与数据库的连接,而不是重新保存到Connection Pool中。

  • 3、当下一次Connection.Open() 执行的时候,ADO.Net就会判断新的ConnectionString与之前保存在Connection Pool中的Connection的connectionString是否一致。
  • 4、 ADO.net需要判断当前的Connection Pool中是否有可以使用的Connection(没有被其他程序所占用),如果没有的话,ADO.net就需要判断ConnectionString设 置的Max Pool Size (默认为100)

​ (1)、如果Connection Pool中的所有Connection没有达到Max Pool Size,ADO.net则会再次连接数据库,创建一个连接,然后将Connection返回给程序。

​ (2)、如果已经达到了 MaxPoolSize,ADO.net就不会再次创建任何新的连接,而是等待Connection Pool中被其他程序所占用的Connection释放,这个等待时间受SqlConnection.ConnectionTimeout(默认是15 秒)限制,也就是说如果时间超过了15秒,SqlConnection就会抛出超时错误。

  • 5、如果有可用的Connection,从Connection Pool 取出的Connection也不是直接就返回给程序,ADO.net还需要检查ConnectionString的ConnectionReset属性 (默认为True)是否需要对Connection 最一次reset。

(3)ASP.NET程序对max pool size的配置

在连接字符串中添加如下内容:

pooling=true;min pool size=5;max pool size=512;

其中Max Pool Size如果未设置则默认为100,理论最大值为32767。最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。在等待队列中,默认等待与服务器的连接的时间为15秒。

默认连接池大小一般是100。

(4)查看应用程序池占用数量

select * from sysprocesses where dbid= db_id('数据库名')

查询出来有几条数据就证明有几个连接数量。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • ASP.NET WebAPI连接数据库的方法

    ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务. ASP.NET Web API 是一种用于在 .NET Framework 上构建 RESTful 应用程序的理想平台. 本文主要实现ASP.NET WebAPI 连接数据库获取数据,并以Json字符串格式返回. 1.创建ASP.NET Web Application(.NET Framework)项目: 2.选择Web API: 3.创建新项目完成: 在ValuesContr

  • ASP.NET连接sql2008数据库的实现代码

    利用SqlConnection对象连接sql2000以上版本,并使用SqlCommand对象对数据库进行读取. SqlCommand类概述: 用于对sql数据库执行sql语句或存储过程. 命名空间:System.Data.SqlClient 程序集: System.Data(在 System.Data.dll中) SqlCommand类的属性 1.CommandText 获取或设置要对数据源执行的Transact-SQL语句或存储过程. 2. CommandType 获取或设置一个值,该值指示如

  • ASP.net如何连接SQL SERVER 2012数据库

    在web.config文件中添加 <connectionStrings> <add name="SQLConnectionString" connectionString="Data Source=服务器名;Initial Catalog=数据库名;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings

  • ASP.NET连接数据库并获取数据方法总结

    本文实例讲述了ASP.NET连接数据库并获取数据方法.分享给大家供大家参考,具体如下: *连接对象的用法SqlConnection,SqlCommand,SqlDataAdapter *数据访问方式的写法 1.获取数据: //引用这两个命名空间 using System.Data.SqlClient; using System.Data; // 初始化连接对象 SqlConnection conn = new SqlConnection(); conn.ConnectionString = "U

  • ASP.NET中各种连接数据库的配置的方法及json数据转换

    一.数据库连接语句 1.MSSQL数据库链接示例 <connectionStrings> <add name="Conn" connectionString="server=.;database=demo;uid=sa;pwd=123456" providerName="System.Data.SqlClient"/> </connectionStrings> 2.Access 2003数据库链接示例:&quo

  • ASP.NET连接 Access数据库的几种方法

    web.config 第一种方法: <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细消息,请访问 http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <appSettings> <add key="AccessConnString"

  • 详解.NET数据库连接池

    目录 前置知识背景 1. .NET数据库连接池的背景 2. .NET 数据库连接池的表现 3. .NET是如何形成数据库连接池的? 4. 连接池中的连接什么时候被移除? .NET 如何清空连接池? 一般我们的项目中会使用1到2个数据库连接配置,同程艺龙的数据库连接配置被收拢到统一的配置中心,由DBA统一配置和维护,业务方通过某个字符串配置拿到的是Connection对象. DBA能在对业务方无侵入的情况下,给业务方切换备份数据库,之后DBA要求旧连接池必须立即被清空, 那么问题来了: dotne

  • .NET Core配置连接字符串和获取数据库上下文实例

    假设数据库就两个表:User.Blogs, 模型类如下 public class User { public int Id { get; set; } public string Name { get; set; } public string Number { get; set; } public string Email { get; set; } } public class Blogs { public int Id { get; set; } public string BolgNam

  • asp.net连接数据库读取数据示例分享

    webconfig配置: 复制代码 代码如下: <connectionStrings>  <add name="MSSQL" connectionString="Data Source=localhost;Initial Catalog=test;User ID=sa;password=sa;" providerName="System.Data.SqlClient"/></connectionStrings>

  • .NET连接数据库以及基本的增删改查操作教程

    一.前言 因为这学期选修的 .net 课程就要上机考试了,所以总结下.net 操作 SqlServer 数据的方法.(因为本人方向是 Java,所以对.net 的了解不多,但以下所写代码均是经过测试成功的),下面话不多说了,来一起看看详细的介绍吧. 二..net 连接数据库 在web.config文件中配置数据库连接,代码写在<configuration></configuration>内 <appSettings> <add key="connstri

随机推荐