ArneMedlem sedan maj 2000267 inlägg Vad har jag för fel i denna kod?
Försöker uppdatera tabellen msgadress
kolumnen "msgto":s alla fält som har värdet av labeln "lblMedlem_User" till "" (alltså ingenting)
Dim UpdateCmd As String = "UPDATE msgadress SET msgto = '' where msgto = " & lblMedlem_User.text
MyCommand = New SqlCommand(UpdateCmd, MyConnection)
MyCommand.ExecuteNonQuery()
Gör jag det i sql Query Analyzer där jag vet namnet går det bra
alla namn "nisse" i kolumnen msgto får värdet "" (ingenting)
UPDATE dbo.msgadress
SET msgto = ''
WHERE (msgto = 'nisse')
CompusaMedlem sedan jan. 20023 327 inlägg Dim UpdateCmd As String = "UPDATE msgadress SET msgto = '' where msgto = " & lblMedlem_User.text & ""
MyCommand = New SqlCommand(UpdateCmd, MyConnection)
MyCommand.ExecuteNonQuery()
Ser ut som fnuttar saknas, har lagt till det så som jag tycker det borde se ut.
ArneMedlem sedan maj 2000267 inlägg Hjälpte inte
Nix, fnuttar hjälpte inte, får felmeddelandet:
Exception Details: System.Data.SqlClient.SqlException: Invalid column name 'nisse'.
mozillaMedlem sedan juli 20011 084 inlägg Du har glömt enkelfnuttarna
Dim UpdateCmd As String = "UPDATE msgadress SET msgto = '' where msgto = '" & lblMedlem_User.text & "'"
MyCommand = New SqlCommand(UpdateCmd, MyConnection)
MyCommand.ExecuteNonQuery()
ArneMedlem sedan maj 2000267 inlägg Hmmmm
Enkelfnuttarna hjälpte först endast med att jag ite fick något felmeddelande längre.
Men när jag körde den, hände ingenting. Värdet kvar kvar i alla.....
När jag till slut testade med att skriva dbo.msgadress (lägga till dbo.) så fungerade allt som det skulle.
Värdet från labeln ersattes med en tom sträng.
Någon som gärna kan förklara varför så man förstår vad som händer?
emissionMedlem sedan dec. 19996 721 inlägg Har du två tabeller som heter msgaddress?
Använd alltid, alltid, alltid parametriserade frågor.
Dim UpdateCmd As String = "UPDATE msgadress SET msgto = '' where msgto = @msgto"
MyCommand = New SqlCommand(UpdateCmd, MyConnection)
MyCommand.Parameters.Add("@msgto",SqlDbType.VarChar,50).Value=lblMedlem_User.text
MyCommand.ExecuteNonQuery()
Snabbare, enklare, säkrare, roligare.
ArneMedlem sedan maj 2000267 inlägg Varför, varför......
Har bara en tabell som heter msgaddress.
Motfråga till ditt "Använd alltid, alltid, alltid parametriserade frågor"
Varför, och vad är skillnaden?
emissionMedlem sedan dec. 19996 721 inlägg
Arne skrev:
Har bara en tabell som heter msgaddress.
Motfråga till ditt "Använd alltid, alltid, alltid parametriserade frågor"
Varför, och vad är skillnaden?
Skillnaden är att man skickar in alla variabla värden i SQL-frågan som separata parametrar i kommandot i stället för att kludda in värdena i själva frågan.
Snabbare
Bland annat pga att SQL-servern cachar exekveringsplanen för själva SQL-frågan. Eftersom frågan ser likadan ut, oavsett parametrarnas värden, blir cachningen effektivare.
Enklare
Enklare, eftersom man inte behöver oroa sig över enkelfnuttar hit och kommatecken dit. Det blir enklare att skriva själva frågan, helt enkelt.
Säkrare
Den helt klart viktigaste aspekten. Risken för SQL Injection är eliminerad, och man behöver inte ersätta enkelfnutt med dubbel enkelfnutt. För det gör du väl?
Roligare
Det är väl roligt att göra något snabbare, enklare och säkrare?! :)