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

Error on sql insert statement (not because of primary key)

我遇到了以下错误; “System.Data.dll

中发生了 'System.Data.SqlClient.SqlException' 类型的未处理异常

附加信息:无法将值 NULL 插入列 'Dogrulama'、table '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。 我从 public class 中获取一些值,在 Form1.cs 中命名为 'degiskenler',从 Form2 中获取一些其他值作为局部变量。

DB table 的列类似于

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' 列出现此错误?我该如何处理? 有人有想法吗?

问题是您的 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)";