遇到這樣一個問題:添加互評信息,斷點調試,跳轉到BLL層后就直接跳到SqlHelper中彈出錯誤,說:未將對象設置引用到實例等。還請人幫忙調試代碼,調試半天發現抽象工廠並沒成功完成反射,奇怪的是:將出現問題的方法中換用反射其他的接口沒有問題,后來將有問題的接口和DAL層類都重寫了,問題好像解決了。所以添加互評就這么實現了,結果實現查詢操作的時候問題重現了,我逐步調試,發現這樣一個問題,調試到抽象工廠類,會發現這個問題:ServerVersion 引發了“System.InvalidOperationException”類型的異常。

如果您跟我一樣使用SqlHelper了,你可以這樣試着解決下問題:看一下你SqlHelper類中的方法是否正常使用了Try…Catch…,我的這個問題就是因為SqlHelper中Try…Catch…使用不正確,打開的數據庫連接並沒正常關閉。
出現問題的帶參數sql查詢語句或存儲過程
#region 執行帶參數的查詢SQL語句或存儲過程
/// <summary>
/// 執行帶參數的查詢SQL語句或存儲過程
/// </summary>
/// <param name="cmdText">查詢SQL語句或存儲過程</param>
/// <param name="paras">參數集合</param>
/// <param name="ct">命令類型</param>
public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
{
try
{
//定義並實例化DataTable表
DataTable datResult = new DataTable();
//實例化SqlCommand
sqlCmd = new SqlCommand(cmdText, GetConn());
//傳來的SqlCommand類型:存儲過程、sql語句等
sqlCmd.CommandType = ct;
//添加參數
sqlCmd.Parameters.AddRange(paras);
using (sdr = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection))
{
datResult.Load(sdr);
}
//返回數據表
return datResult;
}
catch
{
//沒有數據返回空值
return null;
}
finally
{
//關閉記錄集
sdr.Close();
//關閉數據庫
sqlConn.Close();
}
}
#endregion
修改后的sql查詢語句或存儲過程
#region 執行帶參數的查詢SQL語句或存儲過程
/// <summary>
/// 執行帶參數的查詢SQL語句或存儲過程
/// </summary>
/// <param name="cmdText">查詢SQL語句或存儲過程</param>
/// <param name="paras">參數集合</param>
/// <param name="ct">命令類型</param>
public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
{
//實例化一個Datatable對象
DataTable dt = new DataTable();
//創建一個連接
sqlCmd = new SqlCommand(cmdText, GetConn());
//指定命令類型
sqlCmd.CommandType = ct;
//給該命令傳入參數
sqlCmd.Parameters.AddRange(paras);
//將查詢出來的記錄放入dt中
using (sdr = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection))
{
//將SqlDataReader中的記錄放入dt中
dt.Load(sdr);
//關閉閱讀器
sdr.Close();
}
//關閉數據庫連接
Close();
//返回DataTable
return dt;
}
#endregion
小學問,大道理。try…catch…的作用影響很大的……
