27.03. Prenos parametara komandnom objektu
1. Šta su parametri u komandnom objektu?
Kada izvršavamo SQL upite unutar C# koda, preporučljivo je koristiti parametre umesto direktnog umetanja vrednosti u SQL string. Ovo je važno jer:
-
Sprečava SQL injekcije (sigurnosni problem).
-
Omogućava rad sa različitim podacima bez menjanja upita.
-
Poboljšava performanse aplikacije.
SqlCommand klasa omogućava dodavanje parametara pomoću metode Parameters.AddWithValue().
2. Primeri korišćenja parametara u SQL upitima
Primer 1: Ubacivanje podataka u bazu koristeći parametre
Nastavljemo da radimo u vizualnoj aplikaciji iz prethodnohg časa.
Dodati još jedno dugme kojim će da se u bazu unese učenik Marko Marković, sa rednim brojem 200.
U nastavku je deo programskog koda koji je ključan za ovaj primer:
konekcija.Open();
string upit = "INSERT INTO Ucenici (ID, Ime, Prezime) VALUES (@Id, @Ime, @Prezime)";
SqlCommand komanda = new SqlCommand(upit, konekcija);
komanda.Parameters.AddWithValue("@Id", 200);
komanda.Parameters.AddWithValue("@Ime", "Marko");
komanda.Parameters.AddWithValue("@Prezime", "Marković");
int rezultat = komanda.ExecuteNonQuery();
MessageBox.Show("Broj redova koji su dodati u tabelu Ucenici je " + rezultat ");
private void button3_Click(object sender, EventArgs e)
{
string connectionString = "Server=localhost;Database=Skola;User Id=sa;Password=lozinka;";
using (SqlConnection konekcija = new SqlConnection(connectionString))
{
try
{
konekcija.Open();
string upit = "INSERT INTO Ucenici (ID, Ime, Prezime) VALUES (@Id, @Ime, @Prezime)";
SqlCommand komanda = new SqlCommand(upit, konekcija);
komanda.Parameters.AddWithValue("@Id", 200);
komanda.Parameters.AddWithValue("@Ime", "Marko");
komanda.Parameters.AddWithValue("@Prezime", "Marković");
int rezultat = komanda.ExecuteNonQuery();
MessageBox.Show("Broj redova koji su dodati u tabelu Ucenici je " + rezultat );
}
catch (Exception ex)
{
MessageBox.Show("Greška: " + ex.Message);
}
}
}
Napomene: Pošto u našem primeru ID nije identity (autoincrement) potrebno je UNETI i ID za svakog od učenika !
Treba pokušati koristiti različite načine pisanja konekcionog stringa. Ako se koristi user id i lozinka, to se dobija od predmetnog nastavnika...
Zadatak:
Na formu dodati komponente tipa TextBox da bi korisnik mogao da dodaje učenike i dugme na koje se klikne za unos.
Rešenje:
- prvo dodati labele, textBox komponente i dugme na kojem piše UNESI
- dvoklikom na dugme kreirati metodu
- koristiti parametre za unos
- parametrima se dodeljuje uneseni sadržaj iz textBox-ova
- ako je u pitanju broj, treba ga konvertovati, jer se iz textBox-a dobija samo string!
private void btnUnesi_Click(object sender, EventArgs e)
{
string connectionString = "Server=localhost;Database=Skola;User Id=sa;Password=lozinka;";
using (SqlConnection konekcija = new SqlConnection(connectionString))
{
try
{
string unesenoIme = textBoxIme.Text;
string unesenoPrezime = textBoxPrezime.Text;
int uneseniId = Convert.ToInt32(textBoxID.Text);
konekcija.Open();
string upit = "INSERT INTO Ucenici (ID, Ime, Prezime) VALUES (@Id, @Ime, @Prezime)";
SqlCommand komanda = new SqlCommand(upit, konekcija);
komanda.Parameters.AddWithValue("@Id", uneseniId);
komanda.Parameters.AddWithValue("@Ime", unesenoIme);
komanda.Parameters.AddWithValue("@Prezime", unesenoPrezime);
int rezultat = komanda.ExecuteNonQuery();
MessageBox.Show("Uspešno uneti podaci");
}
catch (Exception ex)
{
MessageBox.Show("Greška: " + ex.Message);
}
}
}
Primer 2. Korišćenje parametara za ažuriranje podataka
string upit = "UPDATE Ucenici SET Prezime = @Prezime, Ime = @Ime WHERE ID = @Id";
SqlCommand komanda = new SqlCommand(upit, konekcija);
komanda.Parameters.AddWithValue("@Id", 1);
komanda.Parameters.AddWithValue("@Ime", "Marko");
komanda.Parameters.AddWithValue("@Prezime", "Petrović");
komanda.ExecuteNonQuery();
Primer 3. Korišćenje parametara za brisanje podataka
string upit = "DELETE FROM Ucenici WHERE Ime = @Ime";
SqlCommand komanda = new SqlCommand(upit, konekcija);
komanda.Parameters.AddWithValue("@Ime", "Marko");
komanda.ExecuteNonQuery(); *
Napomene:
- dodati
System.Data.SqlClientbiblioteke.
3. Zadatak:
(2) Nastaviti WinForms aplikaciju sa prethodnog časa
Postaviti ispod toga textBox-ove za unos podataka i dugme za unos .... Klikom na dugme se unose podaci koje je korisnik uneo
Napomena: Pošto u našem primeru ID nije identity (autoincrement) potrebno je UNETI i ID za svakog od učenika !
(3) Dodati dugmiće IZMENI i OBRIŠI:
- Klikom na dugme IZMENI treba da se izmeni ime ili prezime učenika sa zadatim ID
- Klikom na dugme OBRIŠI treba da se obriše učenik sa zadatim ID

...