【问题标题】:ASP.Net String Split not workingASP.Net 字符串拆分不起作用
【发布时间】:2010-10-25 19:01:45
【问题描述】:

这是我的代码

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 

我没有收到任何错误,但它似乎没有正常工作

我正在传递这样的预订参考 AA123456 - BB123456 - CC123456 - 等,并像这样的付款 50000 - 10000 - 30000 -

我基本上需要使用 ref AA123456 更新数据库,因此 alpaid 字段中包含 50000

似乎无法正常工作

有什么想法吗?

谢谢

杰米

【问题讨论】:

  • 目前发生了什么,你的字符串数组是什么样的?
  • 数据库只是没有更新吗?两个可能的原因 - 双 '' 引用查询中的字符串;拆分也不会删除填充字符串的空格,因此如果您的 db 值是干净的,它将丢失。
  • 附带说明,这不是访问数据库的安全方式。将值连接到 SQL 中会使您很容易受到注入攻击。相反,您需要绑定参数。
  • @Steven Sudit 我该怎么做?我是新手对不起

标签: asp.net vb.net session split


【解决方案1】:

我不确定什么不起作用,但我可以告诉您,您不会处理数组中的最后一个条目。您将从 1 变为 Length - 1,它比最后一个索引短一个。因此,除非您的输入字符串以“-”结尾,否则您将错过最后一个。

【讨论】:

  • 其实因为它是一个零基索引,他会错过第一个。但你是对的,有人会失踪。
  • 第一个从 0 开始
  • 正如@Anthony Greco 所说,它错过了第一个 - 感谢您清理这个非常感谢
  • 对不起;我有一段时间没有使用任何 vb 了,我不记得它是基于 0 还是 1(我认为 VB6 是 1,.Net 是 0,现在我想起来了)。
【解决方案2】:

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 的连接方式,并使用 & 字符来完成。

【讨论】:

    最近更新 更多