访问数据库需要注意的问题 c#
在操作数据库的过程中,必然要产生数据库连接,这就要求在使用的时候要及时关闭连接。以避免数据库会话过多的问题。
以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#的更多相关文章
- C#使用ADO.NET访问数据库(一)
博主好久没更新博客了,最近有点忙(打麻将0.0..),今天更新一篇C#的,我还是想坚持更新博客,分享一下自己的心得,闲话少说,开始正题~~ ADO.NET概述:ADO.NET的作用在于他是客户端访问服 ...
- Android 异步任务,通过PHP访问数据库,多线程,线程间通讯
文章列表MainActivity.java package com.eric.asynctask; import java.io.IOException; import java.util.Array ...
- ADO.NET 访问数据库
对数据库的访问时各种数据库应用程序开发的核心技术,.NET框架中提出的ADO.NET技术为应用程序的开发提供了一致的接口,增强了程序的可移植性和可扩展性. a:使用链接对象Connection连接数据 ...
- 如何通过JDBC访问数据库
Java数据库连接(JDBC)用与在Java程序中实现数据库操作功能,它提供了执行SQL语句.访问各种数据库的方法,并为各种不同的数据库提供统一的操作接口,java.sql包中包含了JDBC操作数据库 ...
- (转)发布Silverlight+WCF程序到IIS后,客户端访问数据库失败的解决方案
转自url:http://greatverve.cnblogs.com/archive/2011/11/30/silverlight-wcf-pub.html 我们在编写Silverlight程序时, ...
- 在 Mac OS X 上创建的 .NET 命令行程序访问数据库 (使用Entity Framework 7 )
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- Entity FrameWork 中使用Lambda访问数据库性能优化
在使用Entity Framework 访问数据库时,我们经常使用Lambda表达式,但是如果不小心的话,很容易就掉到坑里了.比如下面的例子:用Lambda访问MSSqlServer中的NewsInf ...
- sqlserver 服务器主体 无法在当前安全上下文下访问数据库
今天使用sqlserver,发现了一个问题,就是使用 insert into 数据库名.dbo.表名(字段) values(值) 这样语句的时候,会返回错误: sqlserver 服务器主体 无法在当 ...
- IOS 使用FMDB多线程访问数据库 及databaseislocked的问题
原理:文件数据库sqlite,同一时刻允许多个进程/线程读,但同一时刻只允许一个线程写.在操行写操作时,数据库文件被琐定,此时任何其他读/写操作都被阻塞,如果阻塞超过5秒钟(默认是5秒,能过重新编译s ...
- PHP访问数据库
1.原生mysql方式 <?php //最原生态的访问方式,不过SQL注入是个麻烦事 $con = mysql_connect("localhost","root& ...
随机推荐
- python csv.reader参数指定
- [转]jquery.pagination.js分页
本文转自:http://www.cnblogs.com/knowledgesea/archive/2013/01/03/2841554.html 序言 这一款js分页使用起来很爽,自己经常用,做项目时 ...
- hduoj 2955Robberies
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- C# 和 Linux 时间戳转换
/// <summary> /// 时间戳转为C#格式时间 /// </summary> /// <par ...
- web子项目的路径问题
http://baidu.com/userms/ userms是一个子应用程序,项目中使用的路径 /content/css/.. 从http://baidu.com/ 开始 ~/content/ ...
- 设计模式之装饰器模式io的小入门(十一)
装饰器模式详解地址 原文总结 定义: 在不必改变原类文件和使用继承的情况下, 动态的扩展一个对象的功能. 通过创建一个包装对象, 也就是装饰来包裹真实的对象 部分详解提示 看了一些文档, 装饰器模式非 ...
- Hibernate课程 初探一对多映射3-3 单向多对一的测试
public static void testManyToOne(){ Student stu1 = new Student("小明","男"); Studen ...
- Chrome拷贝插件的对比 zeroclipboard和clipboard插件
1.zeroclipboard插件 实现原理:Zero Clipboard 利用 Flash 进行复制,用了一个透明的 Flash ,让其漂浮在按钮之上,这样其实点击的不是按钮而是 Flash ,也就 ...
- jq中事件绑定的方法
在唯品会实习生面试中,被面试官问了这么一个问题,“jQuery中绑定事件的方法有几个?”,以click事件为例,我当时想到的只有.click(),.bind(),.on()这三种,然后面试官又追问,“ ...
- The fifth day
All men cannot be first . 今日单词: first(形容词):第一的:基本的:最早的:(副词):第一:首先 翻译:不可能人人都是第一名. <Only Love>-- ...