cmd.ExecuteNonQuery()的用户代码未处理SqlException

时间:2016-10-01 12:44:09

标签: c# .net

我是.Net的新手。我刚开始学习它。我遇到了错误,它显示" SqlException未被用户代码处理。"

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();
}

3 个答案:

答案 0 :(得分:0)

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

我还会非常小心你的50个字符的大小限制和TextBox-Values的直接分配。它可能是另一个例外来源。

答案 1 :(得分:0)

您设置为cmd.CommandText的SQL查询不是有效的SQL。假设tbemp是您的表名,您的查询应如下所示:

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

答案 2 :(得分: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;
      }

如果发生异常,将通过将其放入using语句来处理您的SqlCommand。现在,您还可以从您收到的错误中获得诊断打印。此外,由于您没有对异常做任何事情(比如试图通过重试或其他东西来修复问题),您希望抛出异常,以便调用该方法的代码将知道某些内容是错误的。重新抛出异常时,您不希望这样做throw exception,因为这将重置堆栈跟踪。只需使用throw