2015-04-12 59 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

也就是说,您将值从文本框传递给列表框,但文本框的值与数据库中的数据类型可能有冲突, –