Springen naar inhoud


- - - - -
VS 2015

Opslaan In Sql Database

VS2015 SQL

  • Log in a.u.b. om te beantwoorden
Er zijn 4 reacties in dit onderwerp

#1 Tatooine4691

Tatooine4691

    Starting Developer

  • Leden
  • 22 berichten
    Laatst bezocht gisteren, 21:14
  • LocatieNoord-Holland

Geplaatst op 02 mei 2020 - 16:01

In een sql database is een veld varchar(Max) null. Als ik vanuit een applicatie hierin de tekst jan janssen in wil opslaan gaat dit zonder problemen.

Als ik echter Shaquille "Shaq" O'Neal wil opslaan, dan krijg ik een foutmelding. Blijkbaar vindt VS 2017 de " niet goed om door te zetten vanuit een applicatie naar de SQL database.

Iemand enig idee hoe het probleem met de " kan omzeilen/afvangen?

#2 Supervos

Supervos

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1409 berichten
    Laatst bezocht 30 mei 2020 20:39
  • LocatieBrugge

Geplaatst op 02 mei 2020 - 17:04

Dag Tatooine4691,

Hoe ziet je query voor de database er uit?
Een beetje code kan helpen.

Ik vermoed dat je de waarden meteen in de query plaatst. Hiermee kan loop je gevaar op SQL Injection. Dit betekent dat je vanuit de interface de query kan aanpassen om andere dingen te doen die je niet gepland hebt (zoals andere tabellen uitlezen, rijen toevoegen in een andere tabel of zelfs volledige tabellen verwijderen).

De beste manier om dit te vermijden is door gebruik te maken van query parameters.


Visual Basic Code:
Dim query = "insert into tblGebruiker (naam, email) values (@naam, @email)"
Dim cmd = new SqlCommand(connection)
cmd.CommandText = query
cmd.Parameters.AddWithValue("@naam", txtNaam.Value)
cmd.Parameters.AddWithValue("@email", txtEmail.Value)
cmd.ExecuteNonQuery()



#3 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1189 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 02 mei 2020 - 18:33

Bericht bekijkenSupervos, op 02 mei 2020 - 17:04, zei:

Hiermee kan loop je gevaar op SQL Injection.
SQL Injection:
Bijlage  exploits_of_a_mom.png   31,16K   0 downloads

#4 Tatooine4691

Tatooine4691

    Starting Developer

  • Leden
  • 22 berichten
    Laatst bezocht gisteren, 21:14
  • LocatieNoord-Holland

Geplaatst op 02 mei 2020 - 21:48

@Supervos @Dirk. Eerst bedankt voor jullie reactie.

Code:
Visual Basic Code:
Private Sub BtnSave_Click(sender As Object, e As EventArgs) Handles BtnSave.Click
		Debug.WriteLine("BtnSave_Click")
		Dim SaveStructure As String
		Dim message As Integer
		If NewData Then
			TxtNewData.Text = CType(NewData, String)
			message = MsgBox("Are you sure to add new data into database?", vbYesNo, "Information")
			If message = DialogResult.No Then
				Exit Sub
			End If

			'insert new data statement into table form_Service_Structure'
			SaveStructure = "INSERT INTO Form_Service_Structure(KeyNumber, Form_ID, lblName,LblDescription, Region, Code, FormName, FormKind)_
			Values('" & TxtKeyNumber.Text & "','" & TxtNameID.Text & "','" & TxtLabelName.Text & "' ,'" & TxtLabelDescription.Text & "','" & TxtRegion.Text & "','" & TxtCode.Text & "','" & TxtFormName.Text & "','" & TxtFormKind.Text & "')"
		Else
			TxtNewData.Text = CType(NewData, String)
			message = MsgBox("Are you sure to update data into database?", vbYesNo, "Information")
			If message = DialogResult.No Then
				Exit Sub
			End If
			'update data statement into table Form_Service_Structur'
			SaveStructure = "UPDATE Form_Service_Structure SET Form_ID= '" & TxtNameID.Text & "', Label = '" & TxtServiceLabel.Text & "', lblName= '" & TxtLabelName.Text & "', LblDescription= '" & TxtLabelDescription.Text & "', Region= '" & TxtRegion.Text & "', Code= '" & TxtCode.Text & "', FormName= '" & TxtFormName.Text & "', FormKind= '" & TxtFormKind.Text & "'  where KeyNumber='" & TxtKeyNumber.Text & "'"
		End If

		RUNSql(SaveStructure)


Visual Basic Code:

Private Sub RUNSql(ByVal sql As String)
		Debug.WriteLine("Sub RUNSql")
		Dim cmd As New SqlCommand
		connect() ' open connection
		Try
			cmd.Connection = connection
			cmd.CommandType = CommandType.Text
			cmd.CommandText = sql
			cmd.ExecuteNonQuery()
			cmd.Dispose()
			connection.Close()
			MsgBox("Data has been saved !",, "Information")



Eens kijken hoe het deel van de code
cmd.parameters.addwithvalue hier in past

#5 Supervos

Supervos

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1409 berichten
    Laatst bezocht 30 mei 2020 20:39
  • LocatieBrugge

Geplaatst op 02 mei 2020 - 22:07

Dag Tatooine4691,

Er zijn een paar oplossingen mogelijk:

1. Je geeft een dictionary mee met waarden voor de parameters
Visual Basic Code:
Sub BtnSave_Click()
Dim data = new Dictionary(Of String, Object) From {
{ "@KeyNumber", TxtKeyNumber.Text },
{ "@Form_ID", TxtNameID.Text },
{ "@lblName", TxtLabelName.Text },
...
}

If NewData Then
SaveStructuur = "INSERT INTO Form_Service_Structure(KeyNumber, FormID, lblName, ...) VALUES (@KeyNumber, @Form_ID, @lblName, ...)"
Else
SaveStructuur = "UPDATE Form_Service_Structuur SET Form_ID=@Form_ID, Label=@Label, lblName=@lblName, ..."
End If

RUNSql(SaveStructure, data)
End Sub

Sub RUNSql(sql As String, parameters As Dictionary(Of String, Object))
...
cmd.CommandText = sql
For Each pair In data
cmd.Parameters.AddWithValue(pair.Key, pair.Value)
Next
...
End Sub

2. Je maakt gebruik van een array van parameters

Visual Basic Code:
Sub BtnSave_Click()

If NewData Then
SaveStructuur = "INSERT INTO Form_Service_Structure(KeyNumber, FormID, lblName, ...) VALUES (@KeyNumber, @Form_ID, @lblName, ...)"
Else
SaveStructuur = "UPDATE Form_Service_Structuur SET Form_ID=@Form_ID, Label=@Label, lblName=@lblName, ..."
End If

RUNSql(SaveStructure, New SqlParameter("@KeyNumber", TxtKeyNumber.Text), New SqlParameter("@Form_ID", TxtNameID.Text), ...)
End Sub

Sub RUNSql(sql As String, ParamArray parameters As SqlParameter())
...
cmd.CommandText = sql
cmd.Parameters.AddRange(if(parameters, Enumerable.Empty(Of SqlParameter)())
...
End Sub






Ook met taq VS 2015, VS2015, SQL voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2015] Untitled 1

Met dank aan J├╝rgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)