2016-02-04 90 views
0

我試圖從datGridView到SQL Server插入數據(我從一個Excel文件加載數據)。但是我得到一個主鍵錯誤,它不應該爲空。C#的dataGridView到SQL(插入)

如果我用這樣的:

cmd.Parameters.AddWithValue("@id", 1012); 

它返回一個重複鍵錯誤...

這是我的代碼:

private void btnTest_Click(object sender, EventArgs e) 
{ 
     int stCol = dataGWseznam.Columns.Count; 
     string[] poljeNaslovov = new string[dataGWseznam.Rows.Count]; 

     for (int i = 0; i < stCol; i++) 
     { 
      poljeNaslovov[i] = Convert.ToString(dataGWseznam.Columns[i].HeaderText); 

     } 

     string[] poljeNaslovovAfna = new string[dataGWseznam.Rows.Count]; 

     for (int i = 0; i < stCol; i++) 
     { 
      poljeNaslovovAfna[i] ="@" + Convert.ToString(dataGWseznam.Columns[i].HeaderText); 

     } 

     string msg1 = String.Join(",", poljeNaslovov.Where(s => !string.IsNullOrEmpty(s))); 
     string msg2 = String.Join(",", poljeNaslovovAfna.Where(s => !string.IsNullOrEmpty(s))); 

     try 
     { 
      foreach (DataGridViewRow row in dataGWseznam.Rows) 
      { 
       string constring = @"MY DATA SOURCE"; 

       using (SqlConnection conn = new SqlConnection(constring)) 
       { 
        using (SqlCommand cmd = new SqlCommand("INSERT INTO Monitoring(id,date,time) VALUES(@id,@date,@time)", conn)) 
        { 
         cmd.Parameters.AddWithValue("@id", 1012); 
         cmd.Parameters.AddWithValue("@date", row.Cells["date"].Value); 
         cmd.Parameters.AddWithValue("@time", row.Cells["time"].Value); 

         conn.Open(); 
         cmd.ExecuteNonQuery(); 
         conn.Close(); 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      //handle exception 
      MessageBox.Show(ex.Message); 
     } 
     MessageBox.Show("Done."); 
} 

我該如何解決這個問題?

+1

你用相同的ID對所有行cmd.Parameters.AddWithValue( 「@ ID」,1012); 你必須實現一些東西來allcate不同主鍵 –

回答

0

的第一個問題是因爲很顯然,你沒有設置主鍵(未設置身份上的表)。

檢查這,看看如何將表配置爲自動遞增ID:https://msdn.microsoft.com/en-us/library/ms186775(v=sql.120).aspx

「第二」的錯誤發生,因爲一個ID必須是你的桌子上是獨一無二的。所以,你最好把身份證作爲ID。

(我建議你創建你的桌子上一個新列,並刪除當前一個你可以找到如何在這裏做到這一點:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/04d69ee6-d4f5-4f8f-a115-d89f7bcbc032/how-to-alter-column-to-identity11?forum=transactsql

此維護你的桌子上後,應刪除此:

cmd.Parameters.AddWithValue("@id", 1012) 

,改變從這個insert語句:

INSERT INTO Monitoring(id,date,time) VALUES(@id,@date,@time) 

這樣:

INSERT INTO Monitoring(date,time) VALUES(@date,@time) 

因爲由於您的ID列將是一個身份,您將不需要提供它,因爲它會自動爲您提供增量。

希望這有助於!

+0

好的,謝謝你修復了這個問題,但現在我得到這個: 參數化查詢'(@date nvarchar(4000),@ time nvarchar(4000)''expect the parameter' @date」,但未提供 但數據被添加到數據庫.... – mheonyae

+0

記錄每一個數據?我的意思是,也許在日期變量提供的值是空的。在這種情況下,你應該把它轉換成挪用類型。 – Octanic

+0

是全部,它基本上只是錯誤信息,我可以刪除該異常的消息框,但也只是隱藏的bug ...... – mheonyae