2016-04-27 150 views
-1

我正在嘗試爲我們的小公司獲得一個小工具來工作。c#必須聲明標量變量「@Kundenname」

這應該將數據從DataGridView填充到SQL Server標準數據庫中。 讀出SQL表格工作正常,但我無法獲得寫入值的工具。

我得到標題中提到的錯誤。

下面的代碼:

var kdNummer = new SqlParameter("Kundennummer", SqlDbType.Int); 
var kdName = new SqlParameter("Kundenname", SqlDbType.VarChar); 
var kdMail = new SqlParameter("Kundenmail", SqlDbType.VarChar); 
var kdTele = new SqlParameter("Telefon", SqlDbType.VarChar); 

string kdquery = "INSERT INTO Kunden VALUES (@Kundennummer, @Kundenname, @Kundenmail, @Telefon)"; 

using (SqlConnection updatedb = new SqlConnection("Data Source=;Initial Catalog=updatedb;User ID=;Password=")) 
{ 
    updatedb.Open(); 

    for (int i = 0;i<dataGridView1.Rows.Count;i++) 
    { 
     using(SqlCommand NrDaten = new SqlCommand(kdquery, updatedb)) 
     { 
      kdNummer.Value = dataGridView1.Rows[i].Cells["Kundennummer"].Value;      
      NrDaten.Parameters.Add(kdNummer); 

      NrDaten.ExecuteNonQuery(); 
     } 

     using (SqlCommand NameDaten = new SqlCommand(kdquery, updatedb)) 
     { 
      kdName.Value = dataGridView1.Rows[i].Cells["Kundenname"].Value; 
      NameDaten.Parameters.Add(kdName); 

      NameDaten.ExecuteNonQuery(); 
     } 

     using (SqlCommand MailDaten = new SqlCommand(kdquery, updatedb)) 
     { 
      kdMail.Value = dataGridView1.Rows[i].Cells["Kundenmail"].Value; 
      MailDaten.Parameters.Add(kdMail); 

      MailDaten.ExecuteNonQuery(); 
     } 

     using (SqlCommand TeleDaten = new SqlCommand(kdquery, updatedb)) 
     { 
      kdTele.Value = dataGridView1.Rows[i].Cells["Telefon"].Value; 
      TeleDaten.Parameters.Add(kdTele); 

      TeleDaten.ExecuteNonQuery(); 
     } 
    } 

    updatedb.Close(); 
} 

回答

1

查詢需要4個參數,但你永遠只有一個設置(也請注意,在SqlParameter你需要有@標誌爲好)。因此你會得到一個關於缺少參數的錯誤。您的代碼也許應該是這樣的:

var kdNummer = new SqlParameter("@Kundennummer", SqlDbType.Int); 
var kdName = new SqlParameter("@Kundenname", SqlDbType.VarChar); 
var kdMail = new SqlParameter("@Kundenmail", SqlDbType.VarChar); 
var kdTele = new SqlParameter("@Telefon", SqlDbType.VarChar); 

string kdquery = "INSERT INTO Kunden VALUES (@Kundennummer, @Kundenname, @Kundenmail, @Telefon)"; 
using (SqlConnection updatedb = new SqlConnection("...")) 
{ 
    updatedb.Open(); 

    using (SqlCommand insert = new SqlCommand(kdquery, updatedb)) 
    { 
     insert.Parameters.Add(kdName); 
     insert.Parameters.Add(kdNummer); 
     insert.Parameters.Add(kdMail); 
     insert.Parameters.Add(kdTele); 

     for (int i = 0;i<dataGridView1.Rows.Count;i++) 
     { 
      kdName.Value = dataGridView1.Rows[i].Cells["Kundenname"].Value; 
      kdNummer.Value = dataGridView1.Rows[i].Cells["Kundennummer"].Value;      
      kdMail.Value = dataGridView1.Rows[i].Cells["Kundenmail"].Value; 
      kdTele.Value = dataGridView1.Rows[i].Cells["Telefon"].Value; 

      insert.ExecuteNonQuery(); 
     } 
    } 
} 

或者更短:

string kdquery = "INSERT INTO Kunden VALUES (@Kundennummer, @Kundenname, @Kundenmail, @Telefon)"; 
using (SqlConnection updatedb = new SqlConnection("...")) 
{ 
    updatedb.Open(); 

    for (int i = 0;i<dataGridView1.Rows.Count;i++) 
    { 
     using (SqlCommand insert = new SqlCommand(kdquery, updatedb)) 
     { 
      insert.Parameters.AddWithValue("@Kundenname", dataGridView1.Rows[i].Cells["Kundenname"].Value); 
      insert.Parameters.AddWithValue("@Kundennummer", dataGridView1.Rows[i].Cells["Kundennummer"].Value); 
      insert.Parameters.AddWithValue("@Kundenmail", dataGridView1.Rows[i].Cells["Kundenmail"].Value); 
      insert.Parameters.AddWithValue("@Telefon", dataGridView1.Rows[i].Cells["Telefon"].Value); 

      insert.ExecuteNonQuery(); 
     } 
    } 
} 

編輯:我修改了最大的再利用實例代碼的長版本。否則,您會收到評論中提到的錯誤。

+0

我試圖在代碼看起來像現在之前將所有內容打包到一個語句中。但我得到一個錯誤,它說SqlParameter已經在另一個ParameterCollection中。我用你的代碼也試過了,但現在又說了,參數已經在另一個ParameterCollection中:( – JasonX2000

+0

@ jasonX2000你是否在我的答案中嘗試了短版本?我還會更新長解決方案 –

+0

@Torsten Dittmar 看來似乎工作,只需要將AddWidthValue更改爲AddWithValue。:) 它在另一個錯誤運行至極說: 附加信息:字符串或二進制數據將被截斷。 該聲明已被終止。 但是,當我得到這個錯誤,我可以說更多。 – JasonX2000