2011-09-08 133 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

相关问题