我尝试更新表单,但出现错误:
必须声明标量变量“ @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
)
答案 0 :(得分:1)
一种可能是您的某些参数值为null。当对参数使用空值时,必须将它们设置为DBNull
,否则参数将不会传递到SQL语句:
cmd.Parameters.AddWithValue("@isyeri", ((object) comboBox1.Text ?? DBNull.Value));
也就是说,我认为Text
的{{1}}属性不能为null,但这是处理SQL参数时的好习惯。
答案 1 :(得分:1)
参考以下链接:
对于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);