在操作数据库的过程中,必然要产生数据库连接,这就要求在使用的时候要及时关闭连接。以避免数据库会话过多的问题。

以Oracle数据库为例:

Oracle数据库查看会话,进程的语句

--查询数据库当前进程的连接数

select
count(*)
from v$process;

--查看数据库当前会话的连接数

select
count(*)
from v$session;

--查看数据库的并发连接数

select
count(*)
from v$session where status='ACTIVE';

--查看当前数据库建立的会话情况

select
sid,serial#,username,program,machine,status from v$session;

--查询数据库允许的最大连接数

select
*
from v$parameter where
name
=
'processes';

关于连接关闭的问题

执行一个查询,但是不关闭

private
void Query()

{

OracleConnection conn = null;

try

{

conn = OpenConn();

var cmd = conn.CreateCommand();

cmd.CommandText = "SELECT * FROM HY_USERS where USER_NO = '072779'";

cmd.CommandType = CommandType.Text;

var reader = cmd.ExecuteReader();

while (reader.Read())

{

AddInfo(string.Format("USER_NO:{0},USER_NAME:{1}", reader["USER_NO"], reader["USER_NAME"]));

}

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

finally

{

//CloseConn(conn);

}

}

我们看到产生一个会话

执行多次就会参数多个会话:

我们都知道数据库会话数有大小限制,在会话过多会导致数据库无法连接,所以在操作完毕数据库一定要关闭连接。

我们看看关闭连接后的代码执行的效果

private
void QueryClose()

{

OracleConnection conn = null;

try

{

conn = OpenConn();

var cmd = conn.CreateCommand();

cmd.CommandText = "SELECT * FROM HY_USERS where USER_NO = '072779'";

cmd.CommandType = CommandType.Text;

var reader = cmd.ExecuteReader();

while (reader.Read())

{

AddInfo(string.Format("USER_NO:{0},USER_NAME:{1}", reader["USER_NO"], reader["USER_NAME"]));

}

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

finally

{

CloseConn(conn);

}

}

不管执行多少次,都不会有过多的会话

关于DataReader和DataSet的一些问题

在DataReader的读取过程中,会一直占用OracleConnection连接对象,不能将数据库连接关闭。这个一个需要注意的问题,所以当项目中大量使用DataReader来读取数据,如果作为团队开发,或者有新成员参与进来,没有注意到数据库连接关闭,那么可能出现占用会话的问题,最终甚至导致数据库崩溃;所以在使用DataReader需要慎重。

不过DataReader的读取效率要高,占用内存必DataSet要少。

访问数据库需要注意的问题 c#的更多相关文章

  1. C#使用ADO.NET访问数据库(一)

    博主好久没更新博客了,最近有点忙(打麻将0.0..),今天更新一篇C#的,我还是想坚持更新博客,分享一下自己的心得,闲话少说,开始正题~~ ADO.NET概述:ADO.NET的作用在于他是客户端访问服 ...

  2. Android 异步任务,通过PHP访问数据库,多线程,线程间通讯

    文章列表MainActivity.java package com.eric.asynctask; import java.io.IOException; import java.util.Array ...

  3. ADO.NET 访问数据库

    对数据库的访问时各种数据库应用程序开发的核心技术,.NET框架中提出的ADO.NET技术为应用程序的开发提供了一致的接口,增强了程序的可移植性和可扩展性. a:使用链接对象Connection连接数据 ...

  4. 如何通过JDBC访问数据库

    Java数据库连接(JDBC)用与在Java程序中实现数据库操作功能,它提供了执行SQL语句.访问各种数据库的方法,并为各种不同的数据库提供统一的操作接口,java.sql包中包含了JDBC操作数据库 ...

  5. (转)发布Silverlight+WCF程序到IIS后,客户端访问数据库失败的解决方案

    转自url:http://greatverve.cnblogs.com/archive/2011/11/30/silverlight-wcf-pub.html 我们在编写Silverlight程序时, ...

  6. 在 Mac OS X 上创建的 .NET 命令行程序访问数据库 (使用Entity Framework 7 )

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  7. Entity FrameWork 中使用Lambda访问数据库性能优化

    在使用Entity Framework 访问数据库时,我们经常使用Lambda表达式,但是如果不小心的话,很容易就掉到坑里了.比如下面的例子:用Lambda访问MSSqlServer中的NewsInf ...

  8. sqlserver 服务器主体 无法在当前安全上下文下访问数据库

    今天使用sqlserver,发现了一个问题,就是使用 insert into 数据库名.dbo.表名(字段) values(值) 这样语句的时候,会返回错误: sqlserver 服务器主体 无法在当 ...

  9. IOS 使用FMDB多线程访问数据库 及databaseislocked的问题

    原理:文件数据库sqlite,同一时刻允许多个进程/线程读,但同一时刻只允许一个线程写.在操行写操作时,数据库文件被琐定,此时任何其他读/写操作都被阻塞,如果阻塞超过5秒钟(默认是5秒,能过重新编译s ...

  10. PHP访问数据库

    1.原生mysql方式 <?php //最原生态的访问方式,不过SQL注入是个麻烦事 $con = mysql_connect("localhost","root& ...

随机推荐

  1. Substring Frequency (II) LightOJ - 1427 AC自动机

    https://vjudge.net/problem/LightOJ-1427 把所有模式串加入ac自动机,然后search的时候暴力,每个子串都暴力一下就好. 其实AC自动机就是,先建立好trie图 ...

  2. mysql初期使用全本

    mysql mysql前戏 数据库服务器-:运行数据库管理软件 =>pc 数据库管理软件:管理-数据库 => mysql 数据库:用来组织文件/表 => 文件夹 表:用来存放多行内容 ...

  3. (转)AIX下修改用户最大进程数

    AIX下修改用户最大进程数 原文:http://blog.csdn.net/feichideche/article/details/39498555 使用AIX时候,切换用户,发现进程一直挂起,查看用 ...

  4. js的事件冒泡

    先来段代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  5. ASP.NET前端调用后台方法

    <script>         function MyConfirm() {             if (confirm('存在重复记录,覆盖点继续,不覆盖追加保存点取消')) { ...

  6. 让GIt忽略SSL证书错误的方法

    当你通过HTTPS访问Git远程仓库,如果服务器的SSL证书未经过第三方机构签署,那么Git就会报错.这是十分合理的设计,毕竟未知的没有签署过的证书意味着很大安全风险.但是,如果你正好在架设Git服务 ...

  7. SQL链接字符串

    Windows身份验证:  Data Source=.;Initial Catalog=MyItcast;Integrated Security=True 数据库身份验证:      Data Sou ...

  8. C#序列化结构体

    在将对象或结构体序列化成二进制数据流时,我们通常都会使用 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 类来实现, 但是 ...

  9. python面试题——数据库和缓存(46题)

    1.列举常见的关系型数据库和非关系型都有那些? 2.MySQL常见数据库引擎及比较? 3.简述数据三大范式? 4.什么是事务?MySQL如何支持事务? 5.简述数据库设计中一对多和多对多的应用场景? ...

  10. 【CSS】等高布局

    1. 负margin:   margin-bottom:-3000px; padding-bottom:3000px; 再配合父标签的overflow:hidden属性即可实现高度自动相等的效果.   ...