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

本文关键字:ExecuteNonQuery SqlException 未处理 用户 代码 cmd | 更新日期: 2023-09-27 18:09:52

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

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

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

我也会非常小心您的大小限制为50个字符和直接分配TextBox值。它可能是另一个异常源。

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

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

我会这样做:

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放入using语句来处理它。现在,您还可以从收到的错误中获得诊断打印件。此外,由于您没有对异常执行任何操作(例如尝试通过重试或其他方式修复问题(,因此您希望抛出异常,以便调用该方法的代码知道有什么问题。当重新引发异常时,您不希望执行throw exception,因为这将重置堆栈跟踪。只需使用throw