2010-10-25 7 views
0

Voici mon codeASP.Net Éclate une chaîne ne fonctionne pas

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 

Je ne reçois pas d'erreurs pour cela, mais il ne semble pas fonctionner comme il se doit

Je passe un bookingref comme celui-ci AA123456 - BB123456 - CC123456 - etc et le paiement comme celui-ci 50000 - 10000 - 30000 -

j'ai besoin essentiellement de mettre à jour le db avec l'arbitre AA123456 de sorte que le champ alpaid a 50000 en elle.

peut sembler ne pas faire fonctionner

Toutes les idées?

Merci

Jamie

+0

Qu'est-ce qui se passe actuellement, à quoi ressemblent vos chaînes de caractères? – msarchet

+0

La base de données n'est-elle pas mise à jour? Deux causes possibles - double '' en citant la chaîne dans votre requête; le split ne supprimera pas les espaces qui tapissent les cordes, donc si votre valeur db est propre, elle manquera. –

+2

Sur une note de côté, ce n'est pas un moyen sécurisé pour accéder à la base de données. La concaténation de valeurs dans SQL vous laisse large ouverte aux attaques par injection. Vous devez lier les paramètres à la place. –

Répondre

1

Je ne suis pas sûr de ce qui ne fonctionne pas, mais je peux vous dire que vous n'allez pas traiter la dernière entrée dans vos tableaux. Vous allez de 1 à Longueur - 1, soit un peu moins que le dernier indice. Par conséquent, à moins que vos chaînes d'entrée se terminent par "-", vous manquerez le dernier.

+1

En fait, puisque c'est un indice de base zéro, il va manquer le premier. Mais vous avez raison, on va manquer. –

+1

Et le premier depuis qu'il commence à 0 –

+0

j'ai mis à jour ma question désolé raté le dernier '-' –

1

Votre problème d'indexation mentionné par Mark est seulement un élément, mais cela posera un problème. Je dirais qu'en regardant la base, votre problème provient de ne pas avoir coupé les cordes. Votre base de données n'a probablement pas d'espaces avant ou arrière vos données afin que vous aurez besoin de faire quelque chose comme:

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' ") 

Aussi, je recommande maintenant de la façon dont VB de concaténation et d'utiliser le caractère & faire il.

Questions connexes