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)";
我遇到了以下错误; “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)";