ServerVersion 引發了“System.InvalidOperationException”類型的異常


    遇到這樣一個問題:添加互評信息,斷點調試,跳轉到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…的作用影響很大的……


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM