Benutzer mit den meisten Antworten
Der &-Operator ist für die Typen "String" und "System.Guid" nicht definiert

Frage
-
Hallo zusammen,
habe folgendes Problem. Ich lese aus einer Datenbank die UniqueID und speichere den in einer Variable. Nun möchte ich diese Variable beim SQL-INSERT-Befehl nutzen um die UniqueID zum Speichern weiterer Daten zu nutzen.
Folgende Fehlermeldung: "Der &-Operator ist für die Typen "String" und "System.Guid" nicht definiert"
Kann mir hier jemand weiterhelfen?
Mfg R.K.
Antworten
-
Hi,
Du solltest keine Stringverkettung für SQL Statements verwenden, sondern mit Parametern arbeiten. Ein Beispiel findest Du hier:
http://www.aspnetzone.de/forums/permalink/224594/224595/ShowThread.aspx#224595
Falls Du doch unbedingt bei Stringverkettung bleiben willst, musst Du für deinen Guid noch .ToString() anhängen.
Also bspw.:
Dim SqlStatement As String SqlStatement = "INSERT INTO ... " & Guid.NewGuid().ToString() & " ..."
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robbo1984 Mittwoch, 5. März 2014 14:30
-
Antwort steht doch schon im Thread!?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robbo1984 Mittwoch, 5. März 2014 14:30
-
Hi,
bitte nicht einfach an einigen Stellen irgendwas einbauen, was Du nicht verstehst.
Entweder komplett auf Parameter umstellen oder eben gar keine verwenden. Ein Mischmasch wie hier bringt dir nichts.
Nimm den Originalcode und bau an der Stelle, an der vorher
", " & MyGuid & " " & _
stand, einfach mal:
", '" & MyGuid.ToString() & "' " & _
ein.
Ich persönlich würde auch das UPDATE und das INSERT Statement trennen und separat ausführen, bzw. zumindest mit ; innerhalb des Strings voneinander abgrenzen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robbo1984 Mittwoch, 5. März 2014 14:29
Alle Antworten
-
Ein Code-Ausschnitt wäre sicherlich praktisch.
So kann man nur sagen, das dort offenbar eine Verkettung über den & Operator versucht wird, und das geht halt nicht, wie die Fehlermeldung ja besagt ;-).
Danach würde ich also mal suchen, und das entsprechend ändern.
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com- Bearbeitet Andreas.WolterMicrosoft employee Mittwoch, 5. März 2014 09:34
-
Hi,
Du solltest keine Stringverkettung für SQL Statements verwenden, sondern mit Parametern arbeiten. Ein Beispiel findest Du hier:
http://www.aspnetzone.de/forums/permalink/224594/224595/ShowThread.aspx#224595
Falls Du doch unbedingt bei Stringverkettung bleiben willst, musst Du für deinen Guid noch .ToString() anhängen.
Also bspw.:
Dim SqlStatement As String SqlStatement = "INSERT INTO ... " & Guid.NewGuid().ToString() & " ..."
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robbo1984 Mittwoch, 5. März 2014 14:30
-
na also. genau wie ich sagte..
Verwende doch bitte parametrisierte Statements. Das schützt Dich auch schon ein gutes Stück weit vor SQLInjection.
Hier mal 2 Beispiele:
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com -
Antwort steht doch schon im Thread!?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robbo1984 Mittwoch, 5. März 2014 14:30
-
Hi,
dann hast Du fälschlicherweise OleDbCommand, OleDbParameter, ... und eben nicht SqlCommand, SqlParameter, ... verwendet.
Für SQL Server solltest Du aber letzteres nehmen. Stell daher mal deinen Code entsprechend um.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Antwort steht doch schon im Thread!?
stimmt
ich hab mich einfach auf den Code bezogen, und nicht nochmal nachgeschaut, was davor schon geschrieben wurde
nun haben wir halt ein Beispiel mehr ;)
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com -
Antwort steht doch schon im Thread!?
stimmt
Hallo Andreas,
ich meinte doch gar nicht dich, sondern den TE :) Ok, ich hätte seinen Screenshot zitieren können (wollte ich aber nicht^^)
Er hat einen Screenshot ohne jeglichen weiteren Kommentar gepostet, obwohl er schon mehrere Antworten erhalten hat. Auf die ist er aber gar nicht eingegangen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Mittwoch, 5. März 2014 13:13
-
Egal was ich mache, es funktioniert nicht..... Hier nochmal der Code vom ganzen Sub.... Bitte um Hilfe....
Private Sub SurfaceButton3_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles SurfaceButton3.Click Dim MyGuid As Guid MyGuid = New Guid(UniqueID) Dim cnn As OleDbConnection Dim cmd As New OleDbCommand cnn = Application.cnn If cnn.State = System.Data.ConnectionState.Open Then Dim newWundart = CBWundart.Text Dim newKoerperstelle = CBKoerperstelle.Text Dim newGrad = CBGrad.Text Dim newErstaufnahme = SurfaceTextBox1.Text Dim newAbgeheilt = SurfaceTextBox2.Text Dim newEntstehungsort = CBOrt.Text cmd.Connection = cnn With cmd.Parameters .Add(New OleDbParameter("@ID", MyGuid)) End With cmd.CommandText = "UPDATE [pvs_vivat_TABLET].[dbo].[Wunden] " & _ "SET " & _ "[Wundart] = '" & CBWundart.Text & "' " & _ [Koerperstelle] = '" & CBKoerperstelle.Text & "' " & _ ",[ErstaufnahmeDatum] = '" & SurfaceTextBox1.Text & "' " If SurfaceTextBox2.Text <> "" Then cmd.CommandText = cmd.CommandText & ",[AbgeheiltAmDatum] = '" & SurfaceTextBox2.Text & "' " Else cmd.CommandText = cmd.CommandText & ",[AbgeheiltAmDatum] = null " End If cmd.CommandText = cmd.CommandText & ",[Wundgrad] = '" & CBGrad.Text.Substring(0, 1) & "' " & _ ",[Kommentar] = '" & SurfaceTextBox3.Text & "' " & _ ",[Enstehungsort] = '" & CBOrt.Text & "' " & _ ",[GeaendertProgramm] = 'pvs_Mobile'" & _ ",[GeaendertDurch] = '" & Benutzername & "' " & _ ",[GeaendertAm] = current_timestamp " & _ "WHERE LfdNummer = " & mlngLfdNrWunde & " " & _ "" & _ "INSERT INTO [pvs_vivat_TABLET].[dbo].[_SyncDB] " & _ "([Tabellenname] " & _ ",[InterneKey] " & _ ",[ErstelltAmDatum] " & _ ",[ExterneKey]) " & _ "VALUES( " & _ "'Wunden' " & _ ",@ID " & _ ",CURRENT_TIMESTAMP " & _ ",NEWID() )" cmd.ExecuteNonQuery() End If Me.Close() End Sub
-
Hi,
bitte nicht einfach an einigen Stellen irgendwas einbauen, was Du nicht verstehst.
Entweder komplett auf Parameter umstellen oder eben gar keine verwenden. Ein Mischmasch wie hier bringt dir nichts.
Nimm den Originalcode und bau an der Stelle, an der vorher
", " & MyGuid & " " & _
stand, einfach mal:
", '" & MyGuid.ToString() & "' " & _
ein.
Ich persönlich würde auch das UPDATE und das INSERT Statement trennen und separat ausführen, bzw. zumindest mit ; innerhalb des Strings voneinander abgrenzen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robbo1984 Mittwoch, 5. März 2014 14:29