標籤:
/// <summary> /// Execute a SqlCommand that returns a resultset against the database specified in the connection string /// using the provided parameters. /// </summary> /// <param name="connectionString">一個有效資料庫連接字串</param> /// <param name="cmdType">SqlCommand命令類型 (預存程序, T-SQL語句, 等等。)</param> /// <param name="cmdText">預存程序的名字或者 T-SQL 陳述式</param> /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> /// <returns>A SqlDataReader containing the results</returns> public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(connectionString); // we use a try/catch here because if the method throws an exception we want to // close the connection throw code, because no datareader will exist, hence the // commandBehaviour.CloseConnection will not work try { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; } catch { conn.Close(); throw; } } #region//ExecuteDataSet方法
================================================================================================
-
c#資料庫訪問傳回值類型為SqlDataReader時使用using時注意的問題
-
2014-04-19 0 個評論 來源:c#資料庫訪問傳回值類型為SqlDataReader時使用using時注意的問題
-
收藏 我要投稿
-
在封裝通用 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);
}
}
}
加紅欄位:CommandBehavior.CloseConnection有何作用:
1、CommandBehavior.CloseConnection有何作用2、CommandBehavior.CloseConnection的作用3、ExecuteReader方法中CommandBehavior.CloseConnection的一些注意事項
C# / MSSQL / WinForm / ASP.NET - SQLHelper中返回SqlDataReader資料