访问数据库需要注意的问题 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要少。

转载于:https://www.cnblogs.com/moncci/p/9636156.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值