2011-09-08 132 views
1

我有這個代碼,它的計算結果是false而不是字符串。它所做的一切都是建立一個字符串。任何想法爲什麼?爲什麼在VB.Net中評估爲false?

Dim statement As String = "Insert into table dbo.IV00101 values(" + 
     "ITEMNMBR=" + "@ITEMNMBR" + "," + 
     "ITEMDESC=" + "@ITEMDESC" + " , " + 
     "NOTEINDX=" + "@NOTEINDX" + "," + 
     "ITMSHNAM=" + DBNull.Value + "," + 
     "ITEMTYPE=" + "1" + "," + 
     "STNDCOST=" + "@STNDCOST" + "," + 
     "CURRCOST=" + "@CURRCOST" + "," + 
     "ITEMSHWT=" + "0" + "," + 
     "DECPLQTY=" + "3" + "," + 
     "DECPLCUR=" + "3" + "," + 
     "ITMTSHID=" + DBNull.Value + "," + 
     "TAXOPTNS=" + "1" + "," + 
     "IVIVINDX=" + "0" + "," + 
     "IVIVOFIX=" + "0" + "," + 
     "IVCOGSIX=" + "0" + "," + 
     "IVSLSIDX=" + "0" + "," + 
     "IVSLDSIX=" + "0" + "," + 
     "IVSLRNIX=" + "0" + "," + 
     "IVINUSIX=" + "0" + "," + 
     "IVINSVIX=" + "0" + "," + 
     "IVDMGIDX=" + "0" + "," + 
     "IVVARIDX=" + "0" + "," + 
     "DPSHPIDX=" + "0" + "," + 
     "PURPVIDX=" + "0" + "," + 
     "UPPVIDX=" + "0" + "," + 
     "IVRETIDX" + "0" + "," + 
     "ASMVRIDX=" + "0" + "," + 
     "ITMCLSCD=" + DBNull.Value + "," + 
     "ITMTRKOP=" + "1" + "," + 
     "LOTTYPEAC=" + DBNull.Value + "," + 
     "KPERHIST=" + "0" + "," + 
     "KPTRXHST=" + "0" + "," + 
     "KPCALHST=" + "0" + "," + 
     "KPDSTHST=" + "0" + "," + 
     "ALWBKORD=" + "0" + "," + 
     "VCTNMTHD=" + "1" + "," + 
     "UOMSCHDL=" + "@UOMSCHDL" + "," + 
     "ALTITEM1=" + DBNull.Value + "," + 
     "ALTITEM2=" + DBNull.Value + "," + 
     "USCATVLS_1=" + DBNull.Value + "," + 
     "USCATVLS_2=" + DBNull.Value + "," + 
     "USCATVLS_3=" + DBNull.Value + "," + 
     "USCATVLS_5=" + DBNull.Value + "," + 
     "USCATVLS_4=" + DBNull.Value + "," + 
     "USCATVLS_6=" + DBNull.Value + "," + 
     "MSTRCDTY=" + "1" + "," + 
     "MODIFDT=" + Date.Today.ToString() + "," + 
     "CREATDDT=" + Date.Today.ToString() + "," + 
     "WRNTYDYS=" + "0" + "," + 
     "PRCLEVEL=" + DBNull.Value + "," + 
     "LOCNCODE=" + DBNull.Value + "," + 
     "PINFLIDX=" + "0" + "," + 
     "PURMCIDX=" + "0" + "," + 
     "IVINFIDX=" + "0" + "," + 
     "INVMCIDX=" + "0" + "," + 
     "CGSINFLX=" + "0" + "," + 
     "CGSMCIDX=" + "0" + "," + 
     "ITEMCODE=" + DBNull.Value + "," + 
     "TCC=" + DBNull.Value + "," + 
     "PriceGroup=" + DBNull.Value + "," + 
     "PRICMTHD=" + "1" + "," + 
     "PRCHSUOM=" + DBNull.Value + "," + 
     "SELNGUOM=" + DBNull.Value + "," + 
     "KTACCTSR=" + "0" + "," + 
     "LASTGENSN=" = DBNull.Value + "," + 
     "ABCCODE=" + "1" + "," + 
     "Revalue_Inventory=" + "1" + "," + 
     "Tolerance_Percentage=" + "0" + "," + 
     "Purchase_Item_Tax_Schedu=" + DBNull.Value + "," + 
     "Purchase_Tax_Options=" + "1" + "," + 
     "ITMPLNNNGTYP=" + "1" + "," + 
     "STTSTCLVLPRCNTG=" + "0" + "," + 
     "CNTRYORGN=" + DBNull.Value + "," + 
     "INACTIVE=" + "0" + "," + 
     "MINSHELF1=" + "0" + "," + 
     "MINSHELF2=" + "0" + "," + 
     "INCLUDEINDP=" + "0" + "," + 
     "LOTEXPWARN=" + "0" + "," + 
     "LOTEXPWARNDAYS=" + "0" + "," + 
     "LASTGENLOT=" + DBNull.Value + "," + 
     "Lot_Split_Quantity=" + "0.00000" + "," + 
     "DEX_ROW_TS=" + Date.Today.ToString() + "," + 
     "DEX_RoW_ID=" + "@DEX_RoW_ID" + 
     ")" 
+0

所有舊評論去哪了? – user489041

+0

這條「線」有問題的事實很好地表明,一個字符串構建循環會是一個更好的實現。正如@dlev發現的,** 249 **加上符號中的一個是錯誤的。一個循環最多隻能有四個加號,這種錯誤會立即顯示出來。 –

+1

在Visual Basic中連接字符串時,最好使用&運算符而不是+。 +運算符有一套複雜的規則來決定是否添加,連接或拋出錯誤。 &運算符僅用於字符串操作數,並始終將其操作數擴展爲String。 – briddums

回答

5

正如我在評論中提到,你有一個錯字在你的字符串concatentations:

"KTACCTSR=" + "0" + "," + 
"LASTGENSN=" ***=*** DBNull.Value + "," + 
"ABCCODE=" + "1" + "," + 

改變這種爲+應該讓你去一次。

到位後=,它只是比較是否相等兩個字符串(這當然是false),然後該結果轉換成字符串"False"

有幾種方法可以避免將來出現這種情況。一個是將Option Strict On置於該文件的頂部,這會警告你這種事情。另一個將使用更小,更易於管理的字符串塊,以便每個人都有較低的可能性成爲問題。

在調試這樣的東西方面,我編譯了代碼,然後使用ILSpy打開它。它顯示了正在生成的代碼(即字符串比較)以及實際正在比較的字符串。看到這可以很容易地找到有問題的=(因爲它出現在字符串比較的第一個參數結束之後)。

+1

看起來很糟糕。 +1。 – driis

相關問題