c#数据库插入查询错误
本文关键字:错误 查询 插入 数据库 | 更新日期: 2023-09-27 18:18:29
我有一个查询使用更新,也插入,但我得到一个错误与插入
这是我的代码,总是得到一个错误
{"必须声明标量变量'"@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);
为参数值准备占位符是不够的。
您还需要为命令....
insertCommand.Parameters.AddWithValue("@PatientID", patient.PatientID);
.... and so on for every parameter placeholders
请记住,使用AddWithValue是一个快捷方式,有一些严重的缺点。
框架根据您传递的值为您决定参数的适当数据类型和大小。在某些情况下,这可能导致非常糟糕的性能。
例如,在字符串的情况下,框架将始终传递一个大小等于字符串长度的NVarChar参数。(它必须猜测varchar/nvarchar/size)因此,在每次调用时,参数可以是不同的长度。这将不利于性能,因为Sql Server内部优化器无法存储和重用查询。
比前面的方法长一点,但更精确的方法是:(假设Naam是一个NVarchar(50)数据库字段)
insertCommand.Parameters.Add("@Naam", SqlDbType.NVarChar, 50).Value = patient.Naam;
请参阅
上的这篇好文章数据访问代码如何影响数据库性能