2010-10-25 63 views
0

這裏是我的代碼ASP.Net字符串分割不工作

Dim RefsUpdate As String() = Session("Refs").Split("-"C) 

Dim PaymentsPassedUpdate As String() = Session("PaymentsPassed").Split("-"C) 

Dim x as Integer 

For x = 1 to RefsUpdate.Length - 1 

Dim LogData2 As sterm.markdata = New sterm.markdata() 

Dim queryUpdatePaymentFlags as String = ("UPDATE OPENQUERY (db,'SELECT * FROM table WHERE ref = ''"+ RefsUpdate(x) +"'' AND bookno = ''"+ Session("number") +"'' ') SET alpaid = '"+PaymentsPassedUpdate(x) +"', paidfl = 'Y', amountdue = '0' ") 

Dim drSetUpdatePaymentFlags As DataSet = Data.Blah(queryUpdatePaymentFlags) 

Next 

我沒有得到這方面的任何錯誤,但它似乎沒有工作,因爲它應該

我傳遞一個bookingref這樣AA123456 - BB123456 - CC123456 -等,並支付這樣50000 - 10000 - 30000 -

基本上,我需要與裁判AA123456更新數據庫所以alpaid領域中有50000

似乎無法得到它的工作

任何想法?

感謝

傑米

+0

目前發生了什麼,你的字符串數組是什麼樣的? – msarchet 2010-10-25 19:06:22

+0

數據庫是否沒有更新?兩個可能的原因 - 雙引號在查詢中引用字符串;拆分不會刪除填充字符串的空間,所以如果你的數據庫值是乾淨的,它會錯過。 – 2010-10-25 19:12:19

+2

請注意,這不是訪問數據庫的安全方式。將值連接到SQL會使注入攻擊面臨更大的壓力。相反,您需要綁定參數。 – 2010-10-25 19:14:47

回答

1

我不知道什麼是不工作的,但我可以告訴你,你是不會處理您的陣列中的最後一項。您將從1到長度-1,這是最後一個索引的一小部分。因此,除非您的輸入字符串以「 - 」結尾,否則您將錯過最後一個字符串。

+1

實際上,因爲它是一個零基指數,他會錯過第一個。但你是對的,一個人會失蹤。 – 2010-10-25 19:09:22

+1

第一個因爲它從0開始 – 2010-10-25 19:09:44

+0

我更新了我的問題對不起,錯過了最後一個'-' – 2010-10-25 19:09:48

1

Mark提到的索引問題只是一個項目,但會導致問題。我會說看看你的問題源於沒有修剪絃樂的基礎。你的數據庫可能沒有空格開頭或結尾您的數據,所以你需要做的是這樣的:

Dim refsUpdateString as string = RefsUpdate(x).Trim() 
Dim paymentsPassedUpdateString as string = PaymentsPassedUpdate(x).Trim() 

... 

Dim queryUpdatePaymentFlags as String = ("UPDATE OPENQUERY (db,'SELECT * FROM table WHERE ref = ''" & refsUpdateString & "'' AND bookno = ''" & Session("number") & "'' ') SET alpaid = '" & paymentsPassedUpdateString & "', paidfl = 'Y', amountdue = '0' ") 

另外,我建議用級聯的方式VB保持並使用&字符做它。