C#格式的“必须声明标量变量”错误是什么意思?

时间:2018-09-21 13:31:20

标签: c# .net sql-server ado.net

我尝试更新表单,但出现错误:

  

必须声明标量变量“ @isyeri”。

我的代码和SQL Server表代码如下。

 using (OleDbConnection con = new OleDbConnection("Provider=sqloledb;SERVER=NEVZAT-PC;DATABASE=DENEME;User ID=sa;password=sapass;"))
 using (OleDbCommand cmd = new OleDbCommand("update istakip set isyeri=@isyeri,isaciklama=@isaciklama,durum=@durum,personel=@personel,tarih=@tarih,baslamasaati=@baslamasaati,netsure=@netsure,kullanilanmalzeme=@kullanilanmalzeme,isbolum=@isbolum,arizatanim=@arizatanim,isemrino=@isemrino,kadi=@kadi where id=@id)", con))
 {
     cmd.Parameters.AddWithValue("@isyeri", comboBox1.Text);
     cmd.Parameters.AddWithValue("@isaciklama", textBox2.Text);
     cmd.Parameters.AddWithValue("@durum", comboBox2.Text);
     cmd.Parameters.AddWithValue("@personel", comboBox3.Text);
     cmd.Parameters.AddWithValue("@tarih", dateTimePicker1.Value);
     cmd.Parameters.AddWithValue("@baslamasaati", dateTimePicker2.Value.ToString());//veritabanında varchar türünde bu
     cmd.Parameters.AddWithValue("@netsure", textBox3.Text);
     cmd.Parameters.AddWithValue("@kullanilanmalzeme", textBox4.Text);
     cmd.Parameters.AddWithValue("@isbolum", comboBox4.Text);
     cmd.Parameters.AddWithValue("@arizatanim", comboBox5.Text);
     cmd.Parameters.AddWithValue("@isemrino", textBox5.Text);
     cmd.Parameters.AddWithValue("@kadi", label13.Text);
     cmd.Parameters.AddWithValue("@id", dataGridView1.CurrentRow.Cells[0].Value);

     con.Open();
     cmd.ExecuteNonQuery();
     con.Close();
}

和我的SQL Server表结构:

CREATE TABLE [dbo].[istakip]
(
    [id] [numeric](5, 0) IDENTITY(1,1) NOT NULL,
    [isyeri] [nvarchar](50) NULL,
    [isaciklama] [varchar](max) NULL,
    [durum] [nvarchar](50) NULL,
    [personel] [nvarchar](50) NULL,
    [tarih] [datetime] NULL,
    [baslamasaati] [nvarchar](50) NULL,
    [netsure] [nvarchar](50) NULL,
    [kullanilanmalzeme] [varchar](max) NULL,
    [isbolum] [nvarchar](100) NULL,
    [arizatanim] [nvarchar](100) NULL,
    [isemrino] [nvarchar](50) NULL,
    [kadi] [nvarchar](50) NULL
)

2 个答案:

答案 0 :(得分:1)

一种可能是您的某些参数值为null。当对参数使用空值时,必须将它们设置为DBNull,否则参数将不会传递到SQL语句:

cmd.Parameters.AddWithValue("@isyeri", ((object) comboBox1.Text ?? DBNull.Value));

也就是说,我认为Text的{​​{1}}属性不能为null,但这是处理SQL参数时的好习惯。

答案 1 :(得分:1)

参考以下链接:

MSDN Link for OleDBCommand

对于OleDbCommand:

@更改为?,并使用相同的顺序添加参数。

如@Igor的评论中所述,两个符号都可以使用。检查以下为OleDb添加的参数。同样,您似乎需要将@id参数的单元格值转换为整数。

cmd.Parameters.Add(
        "@isyeri", OleDbType.VarChar, 50).Value = comboBox1.Text;
//...

cmd.Parameters.Add(
        "@id", OleDbType.Integer).Value = Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value);