C#错误消息:无法将值NULL插入列';身份证件
我开发了一个保存图片的程序。但我得到了这个错误信息: 无法将值NULL插入列“Id”C#错误消息:无法将值NULL插入列';身份证件,c#,visual-studio-2015,C#,Visual Studio 2015,我开发了一个保存图片的程序。但我得到了这个错误信息: 无法将值NULL插入列“Id” 在做任何事情之前,你应该检查一下你桌子的结构, 在这里,您可能有一个名为Id的列,它是约束,不能为null 通过阅读您的代码,我无法在下一行看到您正在向sql提供“Id”: cm.CommandText=“插入Bild(文件名,日期i)值(“+label1.Text.ToString()+”,@picture)” 接下来您应该做的是: 根据列类型,将代码中的id发送到sql(创建变量并将其包含在insert命
在做任何事情之前,你应该检查一下你桌子的结构, 在这里,您可能有一个名为Id的列,它是约束,不能为null 通过阅读您的代码,我无法在下一行看到您正在向sql提供“Id”:
cm.CommandText=“插入Bild(文件名,日期i)值(“+label1.Text.ToString()+”,@picture)”代码>
接下来您应该做的是:
- 根据列类型,将代码中的id发送到sql(创建变量并将其包含在insert命令中)(int、guid或其他类型,因此如果使用int,则应增加变量,该变量将保存数据库中下一个“Id”的值,或者如果是guid,则应使用
guid.NewGuid
方法为每一新行创建新的guid)
- 编辑Sql上的id列并应用
AUTO_INCREMENT
关键字以执行自动增量功能,例如:
《图片报》(
id int非空自动增量,
柱的其余部分
))
或者,如果您正在使用Microsoft SQL,您可能会应用下一步,我想您会这样做,因为我可以看到您正在C代码中使用SqlCommand.CommandText属性
假设您正在设计表。如果没有:右键单击
表名称-“设计”。单击所需列。在“设计”列中
属性”(在底部),滚动至“标识规范”
节,展开它,然后将“(Is标识)”切换为“是”。
在做任何事情之前,你应该检查一下你桌子的结构,
在这里,您可能有一个名为Id的列,它是约束,不能为null
通过阅读您的代码,我无法在下一行看到您正在向sql提供“Id”:
cm.CommandText=“插入Bild(文件名,日期)值(“+label1.Text.ToString()+”,@picture)”;
接下来您应该做的是:
- 根据列类型,将代码中的id发送到sql(创建变量并将其包含在insert命令中)(int、guid或其他类型,因此如果使用int,则应增加变量,该变量将保存数据库中下一个“Id”的值,或者如果是guid,则应使用
guid.NewGuid
方法为每一新行创建新的guid)
- 编辑Sql上的id列并应用
AUTO_INCREMENT
关键字以执行自动增量功能,例如:
《图片报》(
id int非空自动增量,
柱的其余部分
))
或者,如果您正在使用Microsoft SQL,您可能会应用下一步,我想您会这样做,因为我可以看到您正在C代码中使用SqlCommand.CommandText属性
假设您正在设计表。如果没有:右键单击
表名称-“设计”。单击所需列。在“设计”列中
属性”(在底部),滚动至“标识规范”
节,展开它,然后将“(Is标识)”切换为“是”。
我不能添加评论,所以我将在这里回答。
如果您的Id是主键,您可以自己插入或使用标识选项(自动递增):
将identity选项添加到来自ssms的密钥中。如果要通过查询执行此操作,请按照此处给出的答案进行操作
在insert语句中,执行插入Bild(Id、文件名、日期)值([您的Id]、'val1'、'val2')
注意:如果主键本身没有插入方法(自动递增),则必须指定要插入的Id。我无法添加注释,因此我将在此处回答。
如果您的Id是主键,您可以自己插入或使用标识选项(自动递增):
将identity选项添加到来自ssms的密钥中。如果要通过查询执行此操作,请按照此处给出的答案进行操作
在insert语句中,执行插入Bild(Id、文件名、日期)值([您的Id]、'val1'、'val2')
注意:如果主键本身没有插入Id的方法(自动递增),则必须指定要插入的Id表的结构是什么?您有一个名为id
的列,该列有一个约束,即它不能为null
,但您没有给它赋值……我猜id应该定义为数据库中的标识列。您需要告诉我们有关您的DBMS和Bild
表的更多信息。您确定设置了吗ID
作为表中的主键?表的结构是什么?您有一个名为ID
的列,该列有一个约束,它不能为null
,但您没有给它赋值……我猜ID应该定义为数据库中的标识列。您需要告诉我们有关DBMS和eBild
表。是否确实已将ID
设置为表中的主键?
private void savepicture()
{
if(pictureBox1.Image != null)
{
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] a = ms.GetBuffer();
ms.Close();
cm.Parameters.Clear();
cm.Parameters.AddWithValue("@picture", a);
cm.CommandText = "insert into Bild (FileName,Datei) values ('" + label1.Text.ToString() + "',@picture )";
sc.Open();
cm.ExecuteNonQuery(); // i get here the error message
sc.Close();
label1.Text = "";
pictureBox1.Image = null;
MessageBox.Show("Bild wurde gespeichert !");
}
}