訪問數據庫須要注意的問題 c#

在操做數據庫的過程當中,必然要產生數據庫鏈接,這就要求在使用的時候要及時關閉鏈接。以免數據庫會話過多的問題。 數據庫

Oracle數據庫爲例: session

Oracle數據庫查看會話,進程的語句 併發

--查詢數據庫當前進程的鏈接數 spa

select count(*) from v$process; 3d

--查看數據庫當前會話的鏈接數 orm

select count(*) from v$session; 對象

--查看數據庫的併發鏈接數 blog

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要少。

相關文章
相關標籤/搜索