SQL表的设计用户:
Columns:
ID(Primary Key),
Name,
Age,
Zip.
我正在使用上面的表格详细信息在asp.net应用程序上显示一个网格视图,我现在可以做。现在我只显示名称,年龄,拉链到gridview.There下面有一个表格gridview,用户可以输入数据并保存回DB.Here我能够输入名称,年龄,zip到数据库,我能够在gridview中看到更改。
因此,当我输入一个重复的名称时,它不会按预期保存到数据库,此时我必须向用户显示名称已存在的一些内容。
这是我在c#中的代码:
try
{
param[0] = new SqlParameter("@Name", SqlDbType.NVarChar);
param[0].Value = txtName.Text;
param[1] = new SqlParameter("@Age", SqlDbType.NVarChar);
param[1].Value = txtAge.Text;
param[2] = new SqlParameter("@Zip", SqlDbType.int);
param[2].Value = txtZip.Text;
DBHelper helper = new DBHelper();
helper.ExecuteNonQuery(CommandType.StoredProcedure, "Add_Users", param);
GridView1.DataBind();
}
catch (Exception ex)
{
}
我期待上面代码中的sql异常,我计划通知用户。但是我无法获得任何异常。
有人可以建议我在这里错过捕获。
我只是想通知用户该名称最终已被采用。
答案 0 :(得分:3)
在这种情况下,使用异常是一种糟糕的设计。这不是错误,而是程序的可预测行为。
解决问题的最简单方法之一是在Add_Users存储过程结束时执行select,返回1或0,具体取决于成功或失败,并使用ExecuteNonQuery的ExecuteScalar insead来获取结果。
您还可以在存储过程中使用return,并取回该值(通常作为特殊输出参数),但我不知道DbHelper是否允许您这样做。
答案 1 :(得分:0)
您可能还想发布“Add_Users”的SQL代码。
我会考虑做一个验证步骤而不是尝试添加它。因此,如果要检查包含您要添加的名称的行数,请使用一个存储过程进行验证。如果计数为零,则继续添加。如果存在具有该名称的记录,则向用户显示消息。
答案 2 :(得分:0)
在您的DBHelper中使用count来确定您的db是否应该提交:
int count = SELECT COUNT(column_name) FROM table_name
并将其返回到您的方法,然后可以测试它(而不是使用Try / Catch)
if (helper.ExecuteNonQuery(CommandType.StoredProcedure, "Add_Users", param) >0))
{
// Show Error
}else
{
// all ok
}