sql insert语句出错(不是因为主键)

时间:2015-12-11 15:12:22

标签: c# sql-server insert null

我面临以下错误; “System.Data.dll中发生了'System.Data.SqlClient.SqlException'类型的未处理异常

附加信息:无法将值NULL插入列'Dogrulama',表'logodb.dbo.ASC_Sayim';列不允许空值。 INSERT失败。

声明已经终止。“

我的sql查询,参数如下:

SqlCommand kayitSorgu = new SqlCommand();
kayitSorgu.Connection = logodbDatabaseConnection;
kayitSorgu.CommandText = "INSERT INTO ASC_Sayim (PaketNo,StokKodu,StokAdi,Lot,Ambar,CoralGozukenAdet," +
    "SayimAdet,Tarih,SayimNo,GerekenIslem,GerekenIslemMiktar) Values " +
    "(@PaketNo,@StokKodu,@StokAdi,@Lot,@Ambar,@CoralGozukenAdet,@SayimAdet,@Tarih,@SayimNo," +
    "@GerekenIslem,@GerekenIslemMiktar)";

kayitSorgu.Parameters.AddWithValue("@PaketNo", Form1.degiskenler.PaketNo);
kayitSorgu.Parameters.AddWithValue("@StokKodu", Form1.degiskenler.StokKodu);
kayitSorgu.Parameters.AddWithValue("@StokAdi", Form1.degiskenler.StokAdi);
kayitSorgu.Parameters.AddWithValue("@Lot", Form1.degiskenler.Lot);
kayitSorgu.Parameters.AddWithValue("@Ambar", Form1.degiskenler.Ambar);
//kayitSorgu.Parameters.Add("@Dogrulama", SqlDbType.VarChar).Value = Dogrulama;
kayitSorgu.Parameters.AddWithValue("@Dogrulama", Form1.degiskenler.Dogrulama);
kayitSorgu.Parameters.AddWithValue("@CoralGozukenAdet", Form1.degiskenler.CoralGozukenAdet);
kayitSorgu.Parameters.AddWithValue("@SayimAdet", SayimAdet);
kayitSorgu.Parameters.AddWithValue("@Tarih", tarih);
kayitSorgu.Parameters.AddWithValue("@SayimNo", Form1.degiskenler.SayimNo);
kayitSorgu.Parameters.AddWithValue("@GerekenIslem", gerekenIslemKodu);
kayitSorgu.Parameters.AddWithValue("@GerekenIslemMiktar", GerekenIslemMiktar);

kayitSorgu.ExecuteNonQuery();

我的插入代码位于Form2。 我从Form1.cs中名为'degiskenler'的公共类中获取了一些值,而从Form2中获取了一些其他值作为局部变量。

数据库表的列类似于

ID  int identitycol IDENTITY
PaketNo varchar(20) 
StokKodu    varchar(20) 
StokAdi varchar(20) 
Lot varchar(20) 
Ambar   varchar(20) 
Dogrulama   varchar(10)
CoralGozukenAdet    numeric(18, 2)  
SayimAdet   numeric(18, 2)  
Tarih   datetime    
SayimNo varchar(10) NULLABLE
KontrolDurumu   varchar(10) NULLABLE
GerekenIslem    bit NULLABLE
GerekenIslemMiktar  numeric(18, 2)  NULLABLE

如果我将相关列设置为'NULLABLE',我可以插入值但是这次,对于该记录,'dogrulama'列的值变为'null'。

我改变了'Dogrulama'专栏的参数,但没有改变。

kayitSorgu.Parameters.Add("@Dogrulama", SqlDbType.VarChar).Value = Dogrulama;

并尝试使用局部变量,并将dogrulama变量的数据类型更改为int(数字),但无法成功。

为什么'dogrulama'列出现此错误?我该怎么处理呢? 有没有人有想法?

1 个答案:

答案 0 :(得分:1)

问题是您的SQL命令不包含Dogrulama列,因此它采用默认值,即NULL,因为该列允许空值并且未明确提供默认值值。

像这样调整您的查询(请注意列列表中添加了Dogrulama列,值列表中添加了@Dogrulama):

"INSERT INTO ASC_Sayim (PaketNo,StokKodu,StokAdi,Lot,Ambar,CoralGozukenAdet," +
"SayimAdet,Tarih,SayimNo,GerekenIslem,GerekenIslemMiktar,Dogrulama) Values " +
"(@PaketNo,@StokKodu,@StokAdi,@Lot,@Ambar,@CoralGozukenAdet,@SayimAdet,@Tarih,@SayimNo," +
"@GerekenIslem,@GerekenIslemMiktar,@Dogrulama)";