0

I have a query that uses update and also insert but i get a error with insert

this is my code and alwas getting a error

{"Must declare the scalar variable \"@PatientID\"."}

    private void btnOpslaan_Click(object sender, EventArgs e)
    {
        if (IsGeldigeData())
        {
            patient.PatientID = Convert.ToInt32(txtPatientID.Text);
            patient.Naam = txtNaam.Text;
            patient.Voornaam = txtVoornaam.Text;
            patient.Straat = txtStraat.Text;
            patient.Huisnummer = txtHuisnr.Text;
            if (txtPostcodeID.Text != "") patient.PostcodeID = Convert.ToInt32(txtPostcodeID.Text);
            patient.Geboortedatum = dtGeboortedatum.Value;
            if (txtHuidige_Afdeling.Text != "") patient.Huidige_Afdeling = Convert.ToInt32(txtHuidige_Afdeling.Text);
            patient.Huidige_Kamer = txtHuidige_Kamer.Text;
            if (txtHuidige_HuisartsID.Text != "") patient.Huidige_Huisarts = Convert.ToInt32(txtHuidige_HuisartsID.Text);
            if (txtHuidige_ZiekenhuisartsID.Text != "") patient.Huidige_Ziekenhuisarts = Convert.ToInt32(txtHuidige_ZiekenhuisartsID.Text);
            if (txtHuidige_Opnamenr.Text != "") patient.Huidige_Opnamenr = Convert.ToInt32(txtHuidige_Opnamenr.Text);

            string insertStatement = @"UPDATE Patient SET  Naam = @Naam, Voornaam = @Voornaam, Straat = @Straat, 
                                    Huisnummer = @Huisnummer, PostcodeID = @PostcodeID, Geboortedatum = @Geboortedatum, 
                                    Huidige_Afdeling = @Huidige_Afdeling, Huidige_Kamer = @Huidige_Kamer, Huidige_HuisartsID = 
                                    @Huidige_HuisartsID, Huidige_ZiekenhuisartsID = @Huidige_ZiekenhuisartsID,
                                    Huidige_Opnamenr = @Huidige_Opnamenr WHERE PatientID = @PatientID
                                    IF @@ROWCOUNT=0 
                                    INSERT INTO Patient (Naam, Voornaam, Straat, Huisnummer, PostcodeID, Geboortedatum, 
                                    Huidige_Afdeling, Huidige_Kamer, Huidige_HuisartsID, Huidige_ZiekenhuisartsID, Huidige_Opnamenr) 
                                    VALUES  (@Naam,@Voornaam,@Straat,@Huisnummer,@PostcodeID,@Geboortedatum,@Huidige_Afdeling,@Huidige_Kamer,
                                                @Huidige_HuisartsID,@Huidige_ZiekenhuisartsID,@Huidige_Opnamenr)";
            SqlCommand insertCommand = new SqlCommand(insertStatement, cs);
            SqlCommand updateCommand = new SqlCommand(insertStatement, cs);
1
  • 4
    Where are you setting your parameters? Commented Jun 15, 2013 at 22:10

1 Answer 1

3

It is not enough to prepare the sql statement with the placeholders for the parameters value.
You need also to create the parameter collection for the command....

 insertCommand.Parameters.AddWithValue("@PatientID",  patient.PatientID);
 .... and so on for every parameter placeholders 

Please rememeber that using AddWithValue is a shortcut with some serious drawbacks.
The Framework decides for you the appropriate datatype and size for the parameter looking at the value you pass. This, in some cases, could lead to very bad performances.
For example, in case of strings the Framework will pass always a NVarChar parameter with size equals to the string length. (It has to guess the varchar/nvarchar/size) So, at every call, the parameter could be of different lenghts. This will be no good for performances because the Sql Server internal optimizer could not store and reuse the query.

A bit lengthier than previous one but more precise approach is: (Assuming Naam is a NVarchar(50) database field).

 insertCommand.Parameters.Add("@Naam", SqlDbType.NVarChar, 50).Value = patient.Naam;

Please see this fine article on

How Data Access Code Affects Database Performance

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.