2010-10-25 43 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保持并使用&字符做它。