Avatar billede hansi67 Nybegynder
14. september 2004 - 00:31 Der er 6 kommentarer og
1 løsning

Parameters - fatter ikke - pædagog søges

Jeg prøver at forstå hvordan man benytter sig af "SqlCommand.Parameters" iforbindelse med opdatering af en DB.

Det går ikke så godt!.. er der en venlig sjæl der gider at hjælpe med at forklare, gerne i pædagogiske vendinger :)

Jeg kan bedst illustrere med et eksempel hvad det er der giver mig problemer, jeg har kommenteret de 4 linier jeg ikke forstå:


-------
SqlConnection cnn = new SqlConnection("Data Source=(local);" +
    "Initial Catalog=Northwind;Integrated Security=SSPI");
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();

SqlCommand cmdSelect = cnn.CreateCommand();
cmdSelect.CommandType = CommandType.Text;
cmdSelect.CommandText = "SELECT CustomerID, ContactName FROM Customers";

SqlCommand cmdUpdate = cnn.CreateCommand();
cmdUpdate.CommandType = CommandType.Text;

// I næste linie forstå ikke: @ContactName og @CustomerID
cmdUpdate.CommandText = "UPDATE Customers SET ContactName = @ContactName WHERE CustomerID = @CustomerID";

// De næste 3 liner forstå jeg ikke :
cmdUpdate.Parameters.Add("@ContactName", SqlDbType.NVarChar,30, "ContactName");
cmdUpdate.Parameters.Add("@CustomerID", SqlDbType.NChar,5, "CustomerID");
cmdUpdate.Parameters["@CustomerID"].SourceVersion = DataRowVersion.Original;

da.UpdateCommand = cmdUpdate;
da.SelectCommand = cmdSelect;
da.Fill(ds, "Customers");

DataRow[] adrEdit = ds.Tables["Customers"].Select("CustomerID = '" + txtCustomerID.Text + "'");

if(adrEdit.Length > 0)
{
  adrEdit[0]["ContactName"] = txtContactName.Text;
  da.Update(ds, "Customers");
  lblResults.Text = "Row has been updated";
}
---------
Avatar billede arne_v Ekspert
14. september 2004 - 07:36 #1
cmdUpdate.CommandText = "UPDATE Customers SET ContactName = @ContactName WHERE CustomerID = @CustomerID"; // lave UPDATE statement og sæt 2 "tomme pladser" af i.s.f. værdier

cmdUpdate.Parameters.Add("@ContactName", SqlDbType.NVarChar,30, "ContactName"); // definer at den tomme plads @ContactName er en NVARCHAR(30)
cmdUpdate.Parameters.Add("@CustomerID", SqlDbType.NChar,5, "CustomerID"); // definer at den tomme plads @CustomerID er en NNCHAR(5)
cmdUpdate.Parameters["@CustomerID"].SourceVersion = DataRowVersion.Original; // giv den tomme plads @CustomerID en værdi
Avatar billede arne_v Ekspert
14. september 2004 - 07:37 #2
Du løser flere problemer ved at lave parametre:

1)  du kan udføre den samme SQL flere gang for forskellige værdier => god performance

2)  du undgår tekniske problemer p.g.a. tilfældige ' i data

3)  du undgår seikkerhedsmæssige problemer p.g.a. ' anbragt med vilje i data (SQL injection)
Avatar billede hansi67 Nybegynder
14. september 2004 - 11:13 #3
Hej Arne
For at tjekke at jeg har fattet det korrekt:

Hvis jeg f.eks. også ønsker at opdatere et ContactEmail felt i DB, så tilføjer jeg dette til koden:
---
cmdSelect.CommandText = "SELECT CustomerID, ContactName, ContactEmail FROM Customers";

cmdUpdate.CommandText = "UPDATE Customers SET ContactName = @ContactName, ContactEmail = @ContactEmail WHERE CustomerID = @CustomerID";


cmdUpdate.Parameters.Add("@ContactEmail", SqlDbType.NVarChar,30, "ContactEmail");

adrEdit[0]["ContactEmail"] = txtContactEmail.Text;
---

Er det korrekt ?
Avatar billede hansi67 Nybegynder
14. september 2004 - 11:15 #4
Nogen der har det "fede link" til en god artikel/tutorial som omhandler dette emne ?
Avatar billede arne_v Ekspert
14. september 2004 - 11:20 #5
Normalt vil man bare sætte den med:

cmdUpdate.Parameters["@ContactEmail"}.Value = "nogen@xxxx.dk";

Det andet er en speciel syntax for DataRow (jeg har ikke rigtigt nogen
erfaring med DataRow).
Avatar billede arne_v Ekspert
14. september 2004 - 11:25 #6
http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson06.aspx

(men det er nok bedre at starte med Lesson01 !)
Avatar billede hansi67 Nybegynder
14. september 2004 - 11:26 #7
Point givet :)
Tak for hjælpen (igen)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester