C#错误消息:无法将值NULL插入列';身份证件

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命

我开发了一个保存图片的程序。但我得到了这个错误信息:

无法将值NULL插入列“Id”


在做任何事情之前,你应该检查一下你桌子的结构, 在这里,您可能有一个名为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和e
    Bild
    表。是否确实已将
    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 !");
        }
    }