2017-06-17 69 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')

注意:您必須指定你想,如果你的主鍵沒有這樣做本身(自動遞增)

相關問題