2017-06-17 99 views
0

我开发了一个保存图片的程序。但我收到此错误信息:C#错误消息:无法将值NULL插入到列'Id

无法将NULL值插入列“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 !"); 
    } 
} 
+2

什么是表的结构的方式插入标识?你有名为'id'的列有一个约束,它不能为空,但你不给它赋值... –

+0

我猜ID应该被定义为数据库中的标识列。你需要告诉我们更多关于你的DBMS和'Bild'表。 –

+0

你确定你在表中设置了“ID”作为主键吗? – Maher

回答

1

任何东西之前,你应该检查你的表图片报的结构, 有你可能有称为Id的列是约束条件,不能为空。

并通过读取你的代码,我不能看到未来您提供“ID”到您的SQL行:

cm.CommandText = "insert into Bild (FileName,Datei) values ('" + label1.Text.ToString() + "',@picture)";

你应该在这里做下一个是:

  • 根据您的列类型(int,guid或其他)发送代码到一个sql(创建变量并将其包含在插入命令中),所以如果您使用的是int,则应该增加变量,以便为下一个'Id'在你的数据库中,或者如果它是Guid,你应该创建新的Guid使用Guid.NewGuid法)上的SQL
  • 编辑ID列,并将AUTO_INCREMENT关键字来执行自动递增特性,例如每新行:

    ALTER TABLE画报( ID INT NOT NULL AUTO_INCREMENT, 休息列 );

或者你可能适用的情况下,接下来的步骤中,您使用Microsoft SQL ,我想你,因为我可以看到你在你的C#代码使用SqlCommand.CommandText属性。

大概你在设计桌子。如果不是,请右键单击 表名 - “设计”。点击需要的列。在“列 属性”(底部)中,滚动到“标识规范” 部分,展开它,然后切换“(是标识)”为“是”。 enter image description here

0

我不能添加评论,所以我会在这里回答。 如果你的ID是主键,你要么自己插入,或使用身份选项(自动递增):

  1. 身份选项添加到从SSMS的关键。如果你想通过查询来做到这一点,请按照这里给出的答案https://dba.stackexchange.com/questions/128433/add-autoincrement-to-existing-pk

  2. 在你的插入语句中做insert into Bild (Id,FileName,Datei) values ([your id], 'val1', 'val2')

注意:您必须指定你想,如果你的主键没有这样做本身(自动递增)

相关问题