c#数据库訪问返回值类型为SqlDataReader时使用using时注意的问题
https://blog.csdn.net/u010512579/article/details/24011761
在封裝通用?SQLSERVER?數據可訪問方法時,假設返回值類型為?SqlDataReader?,那么在創建連接字符串的時候。我們不能寫成例如以下
?public?static??SqlDataReader?ExecuteReader(string?strSQL)
????????{
????????????using?(SqlConnection?connection?=?new?SqlConnection(connectionString))
{
????????????using?(SqlCommand?cmd?=?new?SqlCommand(strSQL,?connection))
????????????{
????????????????try
????????????????{
????????????????????connection.Open();
????????????????????SqlDataReader?myReader?=?cmd.ExecuteReader(CommandBehavior.CloseConnection);
????????????????????return?myReader;
????????????????}
????????????????catch?(System.Data.SqlClient.SqlException?ex)
????????????????{
????????????????????throw?new?Exception(ex.Message);
????????????????}
????????????}
????????}
}
你在使用using創建的時候,在SqlDataReader?賦值后return時,SqlConnection?就會被釋放資源,連接就會被關閉。而我們傳遞過去的SqlDataReader?是引用類型,接收傳遞過去的SqlDataReader?的地方調用的時候,就會提示連接已經被關閉。無法調用,由于??using?(SqlConnection?connection?=?new?SqlConnection(connectionString))在方法結束時,就把資源釋放了,并關閉了連接。為了正常接收傳遞過去的SqlDataReader?。在創建連接的時候不能用using,正確的寫法例如以下
?
?public?static??SqlDataReader?ExecuteReader(string?strSQL)
????????{
????????????SqlConnection?connection?=?new?SqlConnection(connectionString);
????????????using?(SqlCommand?cmd?=?new?SqlCommand(strSQL,?connection))
????????????{
????????????????try
????????????????{
????????????????????connection.Open();
????????????????????SqlDataReader?myReader?=?cmd.ExecuteReader(CommandBehavior.CloseConnection);
????????????????????return?myReader;
????????????????}
????????????????catch?(System.Data.SqlClient.SqlException?ex)
????????????????{
????????????????????throw?new?Exception(ex.Message);
????????????????}
????????????}
????????}
轉載于:https://www.cnblogs.com/xfgnongmin/p/10642901.html
總結
以上是生活随笔為你收集整理的c#数据库訪问返回值类型为SqlDataReader时使用using时注意的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot的web练手项目,适
- 下一篇: 基于java的程序启动出错Could n