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