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