如何检查sql中的重复条目

时间:2012-03-22 13:45:30

标签: c# sql-server

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异常,我计划通知用户。但是我无法获得任何异常。

有人可以建议我在这里错过捕获。

我只是想通知用户该名称最终已被采用。

3 个答案:

答案 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
   }