2016-10-01 35 views
0

未处理我是新来的.Net。我刚开始学习它。我遇到了错误,它显示“SqlException未被用户代码处理”。SqlException未被用户代码cmd.ExecuteNonQuery()

protected void Button1_Click(object sender, EventArgs e) 
{ 
    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandText = "insert tbemp (@eno, @ename, @es, @eadd)"; 
    cmd.Connection = con; 
    cmd.Parameters.Add("@eno",SqlDbType.Int).Value = Convert.ToInt32(TextBox1.Text); 
    cmd.Parameters.Add("@ename", SqlDbType.VarChar,50).Value = TextBox2.Text; 
    cmd.Parameters.Add("@es", SqlDbType.VarChar, 50).Value = TextBox3.Text; 
    cmd.Parameters.Add("@eadd", SqlDbType.VarChar, 50).Value = TextBox4.Text; 
    cmd.ExecuteNonQuery(); 
    cmd.Dispose(); 
    TextBox1.Text = String.Empty; 
    TextBox2.Text = String.Empty; 
    TextBox3.Text = String.Empty; 
    TextBox4.Text = String.Empty; 
    TextBox1.Focus(); 
} 
+5

https://www.tutorialspoint.com/sql/sql-insert-query.htm SQL具有结构,语法和关键字。 – Plutonix

+2

阅读[问]。该异常有一个非常有用的消息,指出您的查询出了什么问题。使用这个信息,你可以做研究,你可以找到解决方案。 – CodeCaster

回答

0

您的插入DML不正确。它应该是:insert into tbemp values(@eno, @ename, @es, @eadd)

我还会非常小心您的大小限制为50个字符并直接指定TextBox值。这可能是另一个异常来源。

0

您设置为cmd.CommandText的SQL查询不是有效的SQL。假设tbemp是你的表名,您的查询应该是这样的:

insert into tbemp values (@eno, @ename, @es, @eadd) 
+0

我认为如果我们在单个表格中输入值,我们可以在不使用的情况下添加值。此外,我也尝试过,但没有运气:( – Rahul

+0

您的表是否有比4更多的列?在这种情况下,您可能需要指定明确插入的列,如:'insert into tbemp(column1,column2 ,column3,column4)values(@eno,@ename,@es,@eadd)' –

+0

只是fyi,在T-SQL中不能省略INTO。下面是一些有用的例子,说明如何正确使用INSERT INTO更进一步:https://technet.microsoft.com/en-us/library/dd776381%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396 –

0

我会做这样的事情:

using (SqlCommand cmd = new SqlCommand()) 
    { 
     try 
     { 
     cmd.CommandText = 
     "INSERT tbemp VALUES (@eno, @ename, @es, @eadd)"; 
     cmd.Connection = con; 
     cmd.Parameters.Add("@eno", SqlDbType.Int).Value = 
      Convert.ToInt32(TextBox1.Text); 
     cmd.Parameters.Add("@ename", SqlDbType.VarChar, 50) 
      .Value = TextBox2.Text; 
     cmd.Parameters.Add("@es", SqlDbType.VarChar, 50).Value = 
      TextBox3.Text; 
     cmd.Parameters.Add("@eadd", SqlDbType.VarChar, 50).Value = 
      TextBox4.Text; 
       cmd.ExecuteNonQuery(); 

     TextBox1.Text = String.Empty; 
     TextBox2.Text = String.Empty; 
     TextBox3.Text = String.Empty; 
     TextBox4.Text = String.Empty; 
     TextBox1.Focus(); 
     } 
     catch (SqlException exception) 
     { 

      System.Diagnostics.Debug.WriteLine(exception.Message); 
      throw; 
     } 
     catch (Exception exception) 
     { 
      System.Diagnostics.Debug.WriteLine 
      ("General Exception caught: " + exception.Message); 
      throw; 
     } 

在例外的情况下,你的SqlCommand会,将其置于处置使用声明。现在,您还将从您收到的错误中获得诊断打印。此外,由于您对异常没有做任何事情(比如试图通过重试或其他方式解决问题),所以您希望抛出异常,以便调用该方法的代码将知道某些错误。当重新抛出一个异常时,你不想这样做throw exception,因为这会重置堆栈跟踪。只需使用throw即可。

相关问题