c#查询错误,插入数据库

时间:2013-06-15 22:08:08

标签: c# sql-server-2008

我有一个使用更新的插件,也插入但是插入

时出错

这是我的代码而且收到错误

  

{“必须声明标量变量\”@ 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 个答案:

答案 0 :(得分:3)

使用占位符为参数值准备sql语句是不够的 您还需要为命令....

创建参数集合
 insertCommand.Parameters.AddWithValue("@PatientID",  patient.PatientID);
 .... and so on for every parameter placeholders 

请记住,使用AddWithValue是一个有一些严重缺点的捷径 框架为您确定参数的相应数据类型和大小,查看您传递的值。在某些情况下,这可能导致非常糟糕的表现 例如,在字符串的情况下,Framework将始终传递一个大小等于字符串长度的NVarChar参数。 (它必须猜测varchar / nvarchar / size)因此,在每次调用时,参数可能具有不同的长度。这对性能没有好处,因为Sql Server内部优化器无法存储和重用查询。

比前一个更长,但更精确的方法是:(假设Naam是一个NVarchar(50)数据库字段)。

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

请参阅

上的这篇优秀文章

How Data Access Code Affects Database Performance