1. 程式人生 > >【機房重構】SQL語句已終止

【機房重構】SQL語句已終止

    在下機將消費時間寫入資料庫時,出現了一個沒有遇到過的錯誤,用了將近一下午的時間才改正過來,其實出錯的原因也很簡單。

                                       

    “語句已終止”,首先想到的是自己沒有那個能力將更新語句寫成終止語句吧!思維往這個方向偏,就忽略了本身導致問題的原因。思維越來越偏,甚至懷疑是自己寫的SQL語句導致資料庫死迴圈了,真是腦洞大開。。。 SQL語句如下:
//SQL更新命令語句
string cmdText = "Update Line Set [email protected],[email protected]
,[email protected],[email protected] where [email protected] and [email protected]"; //引數 SqlParameter[] sqlParams={new SqlParameter("@ConTime",lineList[0].ConTime), new SqlParameter("@Money",lineList[0].ConMoney), new SqlParameter("@OffTime",dt), new SqlParameter("@CID",lineList[0].CID), new SqlParameter("@Statu",false), new SqlParameter("@Status",true)};
    其實仔細看一看就能看到錯誤資訊:將截斷字串或二進位制資料。“將截斷字串或二進位制資料。”說明新增到資料庫的資訊,有的欄位已經超出了資料庫裡的長度被截斷,或者是其中的型別出現了不匹配!其實怎樣準確的找到除錯過程中具體的錯誤,以前的部落格裡面已經有了敘述:《開啟調錯之旅》,這裡就不再多加敘述。
    這次欄位超出範圍的是消費時間,之前設定的是varchar(10)型別,長度太小,消費時間計算出的數值過大,導致了字串被截斷。當然,出現問題說明varchar型別沒有自動修剪資料的功能,便將這個欄位設定成了decimal型別。decimal可以根據設計資料庫時設定的長度自動修剪資料,使資料儲存時適應型別本身的長度,避免了資料過長被截斷的錯誤。
    雖然知道怎麼改了,但是具體是怎麼回事兒,卻沒有查到,還是需要大神指教的。