前幾天寫一個程序時,無意中遇到一個怪問題.
症狀描述如下:
一台聯想服務器上安裝了SQLSERVER服務,在其一個數據庫裡寫了一個存儲過程.此存儲過程接受一個參數,裡面的語句對參數進行判斷然後執行分支.
if @CustType=0
..................
else if @CustType=1
.......................
else
...............
基本結構是這樣.
當我在開發的時候,用我的筆記本(康柏)上的程序連上服務器,程序裡用的ADO中的Recordset來處理.當執行到rs.open時一點問題也沒有.在服務器上也用此程序執行調用存儲過程也沒有問題,一切正常.
但是當用該單位的其他計算機(都是聯想),用同樣的程序訪問時,當執行到存儲過程中第一種情況時,所有的窗體都自動關閉,也沒有任何的異常出現.
還有一種特別的情況存在,因為這個問題以前在其中一台聯想機上有過,後來我去查看這個問題,查不出原因.於是我在這台計算機上安裝了VS6,現場調試,可是我調試時一切正常,過了一個月後,又出現原來的問題(窗體全關閉)
這下問題大了.同樣的程序在不同的計算機上執行時有時正常有時不正常,程序我相信絕對沒有錯.我想可能是計算機配置有問題.於是當一台計算機重做了,再試,還是不行.
想想會不會是SP沒打,又會了近二個小時把所有的SP安裝好.還是不正常. 再安裝VS6,也沒有用. 問題到底在哪裡呢.我仔細想想,我曾想到會不會是聯想的破機器有問題,會不會是他的CPU指令不對.(因為機器比較舊一點,再說在其他計算機上從來不出現這種問題). 我試著將程序中第一種情況的值改變一下,本來是0,改成3 這樣沒有問題.於是我將存儲過程中的if @CustType=0 改成 if @CustType=3.問題又出現了. 會不會問題出現在這個分支,裡面的邏輯肯定都是對的.看到此分支最後有一行代碼,此代碼是調試時用的.用來查看存儲過程執行時,扭虧為執行了什麼語句,也就是一句print (@SqlStr),會不會是這語句引起的.將其注釋了).打開程序再試. 在刀有的計算機上通過.
原來這個問題是print語句引起的.怪就怪在有的客戶端執行時不會有問題.,而出現問題時又不報任何異常,只是將客戶端窗體自動關閉.看來以後寫程序時一定要注意這個問題.要將調試代碼清理掉. 害得我白白花了近一天的時間.