2015-04-12 60 views
0

這是我的插入代碼,我得到了我形式文本框和我寫的東西里面,但按下按鈕時,與它下面顯示執行代碼由(cmd.ExecuteNonQuery我有麻煩插入,在我的SQL Server數據庫中刪除行

SqlConnection cn = new SqlConnection(global::dotasuka.Properties.Settings.Default.Database1ConnectionString); 

try 
{ 
    cn.Open(); 

    SqlCommand cmd = new SqlCommand(); 

    cmd.CommandText = "INSERT INTO Heroes (Heroname, Attacktype, patribute, role, role2, role3) VALUES (@Heroname, @Attacktype, @patribute, @role, @role2, @role3)"; 
    cmd.CommandType = CommandType.Text; 

    cmd.Parameters.AddWithValue("@Heroname", textBox1.Text); 
    cmd.Parameters.AddWithValue("@Attacktype", textBox2.Text); 
    cmd.Parameters.AddWithValue("@patribute", textBox3.Text); 
    cmd.Parameters.AddWithValue("@role", textBox4.Text); 
    cmd.Parameters.AddWithValue("@role2", textBox5.Text); 
    cmd.Parameters.AddWithValue("@role3", textBox6.Text); 

    cmd.ExecuteNonQuery(); 

    textBox1.Clear(); textBox2.Clear(); 
    textBox3.Clear(); textBox4.Clear(); 
    textBox5.Clear(); textBox6.Clear(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 
finally 
{ 
    cn.Close(); 
} 

第二代碼段的錯誤是我更新代碼由execute non query

SqlDataReader reader = null; 
SqlConnection cn = new SqlConnection(global::dotasuka.Properties.Settings.Default.Database1ConnectionString); 

SqlCommand sda = new SqlCommand("SELECT * FROM Heroes ", cn); 

cn.Open(); 

reader = sda.ExecuteReader(); 

while (reader.Read()) 
{ 
    object Heroname = reader["heroname"]; 

    listBox1.Items.Add(Heroname.ToString()); 
} 

reader.Close(); 

cn.Close(); 
0123試圖執行,相同錯誤時其顯示相同的錯誤

我需要幫助,儘快有人可以,ty!

+1

「An error」?請始終報告(並仔細閱讀,當你在)它** **確切**錯誤信息。 – Mat

+0

檢查我的答案,如果這有助於你,不要忘記選擇它作爲正確的答案。 –

+0

你應該看看[我們可以停止使用AddWithValue()了嗎?](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/)並停止使用'.AddWithValue()' - 它可能會導致意外和令人驚訝的結果... –

回答

0

我認爲你收到此錯誤,是因爲你使用reserved wordRole你應該把它放在括號[]

cmd.CommandText = "INSERT INTO Heroes (Heroname, Attacktype,patribute,[role],role2,role3) VALUES (@Heroname, @Attacktype,@patribute,@role,@role2,@role3)"; 
0

我建議,以避免傳遞參數的那個方法,用

cmd.Parameters.AddWithValue("@Heroname", textBox1.Text); 

你沒有指定datatypelength,這是正確的ADO.NET會猜測他們,但這並不總是偏偏,而不是那試試這個方法:

cmd.Parameters.Add("@Heroname", SqlDbType.VarChar, 50).Value = textBox1.Text; 

的所有參數。

+0

謝謝你們,幫了我很多! –

+0

歡迎您,如果有幫助,您可以點擊答案左側的勾號接受它。 – jfun

0

它是一個空引用異常嗎?

讀你的代碼,我認爲你需要改變SqlDataReader reader = null;SqlDataReader reader = new SqlDataReader;

0
 SqlConnection cn = new SqlConnection(global::dotasuka.Properties.Settings.Default.Database1ConnectionString); 


     try 
     { 
      SqlCommand cmd = new SqlCommand("INSERT INTO Heroes (heroname,attacktype,patribute,role,role2,role3) Values (@heroname,@attacktype,@patribute,@role,@role2,@role3) ", cn); 
      cn.Open(); 
      cmd.Parameters.AddWithValue("@heroname", textBox1.Text); 
      cmd.Parameters.AddWithValue("@attacktype", textBox2.Text); 
      cmd.Parameters.AddWithValue("@patribute", textBox3.Text); 
      cmd.Parameters.AddWithValue("@role", textBox4.Text); 
      cmd.Parameters.AddWithValue("@role2", textBox5.Text); 
      cmd.Parameters.AddWithValue("@role3", textBox6.Text); 

      cmd.ExecuteNonQuery(); 
     } 

     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      cn.Close(); 

     } 
  1. 此代碼現在的工作,我的表格裏我加了一個列表框,它並顯示添加的行用自己的價值觀!但關閉窗體並檢查數據庫內部,它不顯示該行?怎麼了?
+0

也就是說,您將值從文本框傳遞給列表框,但文本框的值與數據庫中的數據類型可能有衝突, –