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