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();
}
您的插入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
。