[VB.NET + SQL] String concatenation werkt niet

Pagina: 1
Acties:

  • Praetorian
  • Registratie: November 2001
  • Laatst online: 22-08 10:59
Ik heb iets ontdekt in VB.NET waarvan ik vermoed dat het mogelijk een bug is. Als ik een SQL query aan het opbouwen ben stopt VB.NET op een gegeven moment met het opbouwen van de string. Voorbeeld:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dim strQuery As String = ""
Dim strEmail As String = ""
Dim strMessage As String = ""
Dim adoConnection As ADODB.Connection = New ADODB.Connection

strEmail = "mijnemail@mijnisp.com"
strMessage  = "Dit is een bericht"

adoConnection.ConnectionString = "DSN=eendsn; UID=iets; PWD=nogiets"
adoConnection.Open()

strQuery = "INSERT INTO Tabelnaam (veld1, veld2, veld3, veld4) VALUES ('waarde1', 'waarde2', '" & strEmail & "', '" & strMessage & "')"

adoConnection.Execute(strQuery)

adoConnection.Close
adoConnection = Nothing


Nu gaat hij op z'n bek met de melding dat m'n query een "unterminated string constant" bevat. Als ik de waarde van strQuery bekijk is hij alles t/m strMessage, maar "')" wordt er niet aan vast geplakt. Als ik het gedeelte dat ik aan strQuery toeken watch geeft hij daarentegen wel de volledige waarde.

Heeft iemand enig idee of hier een workaround voor is? Ik heb al verschillende dingen geprobeerd, maar ik krijg het niet aan de praat. Dit probleem heb ik alleen in VB.NET, niet in VB6 of ASP (waarin ik al honderden soortgelijke queries heb opgebouwd).

[ Voor 19% gewijzigd door Praetorian op 06-03-2003 19:06 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Visual Basic .NET:
1
2
3
4
5
Private Const strQuery as string = "INSERT INTO Tabelnaam (veld1, veld2, veld3, veld4) VALUES ('waarde1', 'waarde2', '{0}', '{1}')"

....

adoConnection.Execute(String.Format(strQuery,strEmail,strMessage))

ff kijken of dit zo iig klopt..

Geloof het wel.. :P

Maar erhm.. Wat zegt je tracing als je hem net voor je adoConnection.Execute er uit gooit?
Dus
Visual Basic .NET:
1
2
Context.Current.Trace.Write(strQuery)
' Je mag zelf even de goede namespace opzoeken.. :)

[ Voor 54% gewijzigd door gorgi_19 op 06-03-2003 19:03 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Vreemd de string is ook niet dermate lang dat hij out of memory zou kunnen raken.
Misschien is er een limiet aan het aantal concats die je mag doen?
En als je die & "')" eens toevoegt aan strQuery?

It’s nice to be important but it’s more important to be nice


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

JonkieXL schreef op 06 March 2003 @ 19:05:
Misschien is er een limiet aan het aantal concats die je mag doen?
Afaik is die er niet. Het enige nadeel is dat hij op een bepaald moment ontzettend traaaaaaag gaat worden. Daarom hebben ze ook de stringbuilder uitgevonden.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Praetorian
  • Registratie: November 2001
  • Laatst online: 22-08 10:59
gorgi_19 schreef op 06 March 2003 @ 19:00:
Visual Basic .NET:
1
2
3
4
5
Private Const strQuery as string = "INSERT INTO Tabelnaam (veld1, veld2, veld3, veld4) VALUES ('waarde1', 'waarde2', '{0}', '{1}')"

....

adoConnection.Execute(String.Format(strQuery,strEmail,strMessage))

ff kijken of dit zo iig klopt..

Geloof het wel.. :P

Maar erhm.. Wat zegt je tracing als je hem net voor je adoConnection.Execute er uit gooit?
Dus
Visual Basic .NET:
1
2
Context.Current.Trace.Write(strQuery)
' Je mag zelf even de goede namespace opzoeken.. :)
Dit geeft helaas het zelfde negatieve resultaat.....
Ik heb het nu even in VB6 gedaan, en daar gaat het wel goed..... :'(

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

En wat zegt je tracing?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Ipv je SQL string zo op te bouwen, is het veel beter en veiliger als je werkt met parameters.

Bv:
C#
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
SqlConnection = new SqlConnection(connstring);

SqlCommand cmd = new SqlCommand ();
cmd.Connection = conn;

cmd.CommandText = "INSERT INTO tabel (VELD1, VELD2) VALUES (@p_veld1, @p_veld2);

cmd.Parameters.Add ("@p_veld1", SqlDbType.Int);
cmd.Parameters.Add ("@p_veld2", SqlDbType.VarChar);

cmd.Parameters["@p_veld1"].Value = 2;
cmd.Parameters["@p_veld2"].Value = test;
cmd.ExecuteNonQuery();

https://fgheysels.github.io/

Pagina: 1