1

我有一个登录页面,用户有 ID,ID 是表中的主键。我也有一个管理员帐户,管理员可以创建用户。但是,当我使用现有 ID 创建用户帐户时,网页会崩溃。我想处理这种情况并发出警告,指出此 ID 存在且无法创建。这是我的代码:

  public void CreateStudent(int ID, String status, String email, String firstName, String lastName, String password, String level, String program)
{
    SqlConnection con = new SqlConnection(GetConnectionString());


    string query1 = "insert into StudentTable(Name,Surname,ID,email,level,program,status,password,Type) values(@firstName,@lastName,@ID,@email,@level,@program,@status,@password,'Student')";


    SqlCommand command = new SqlCommand(query1,con);

    command.Parameters.AddWithValue("@firstName", firstName);
    command.Parameters.AddWithValue("@lastName", lastName);
    command.Parameters.AddWithValue("@ID", ID);
    command.Parameters.AddWithValue("@email", email);
    command.Parameters.AddWithValue("@level", level);
    command.Parameters.AddWithValue("@program", program);
    command.Parameters.AddWithValue("@status", status);
    command.Parameters.AddWithValue("@password", password);

    int result;
    con.Open();
    result = command.ExecuteNonQuery();
    con.Close();


}

谁能帮我这个?坦尔斯

4

3 回答 3

1

有多种方法。您可以捕获异常并显示错误消息。这也将有助于其他错误情况,例如丢失连接。

但是,如果这是您期望在正常操作期间发生的情况,您应该在没有异常的情况下处理这种情况。一种方法是让您insert只插入一行新的id

insert  YourTable
        (id, col1, col2, ...)
select  @id
,       @col1
,       @col2
,       ...
where   not exists
        (
        select  *
        from    YourTable
        where   id = @id
        )

将参数传递给您的查询,例如:

command.Parameters.AddWithValue("@id", 42);
command.Parameters.AddWithValue("@col1", "value1");
command.Parameters.AddWithValue("@col2", "value2");

现在ExecuteNonQuery()返回受影响的行数。您可以使用它来检查是否insert实际向表中添加了新行:

var result = command.ExecuteNonQuery();
if (result == 1)
{
    lblResult.Text = "New row inserted!";
    lblResult.Color = Color.Green;
}
else
{
    lblResult.Text = "Failed to insert new row.";
    lblResult.Color = Color.Red;
}
于 2013-06-01T22:02:46.140 回答
0

我已将电子邮件属性设为主键,然后检查数据库是否存在相同的电子邮件并且有效

于 2013-06-30T15:19:49.583 回答
0

与其试图处理因尝试添加具有相同 ID 的用户而返回的错误,不如先检查用户是否存在,如果可以的话,只创建新帐户。尽管您仍然需要处理异常以适应两个人尝试创建相同记录的情况。

因此,您将拥有以下 SQL:

select * from StudentTable where ID = @newID

如果这找到了记录,您可以报告错误。如果它没有找到任何东西,那么您可以继续创建新记录。

虽然如果您使用 ID 作为主键,最好将其作为表上的标识列,并在创建新行时自动递增。您仍然需要检查学生是否已经存在 - 使用电子邮件作为人类可读的唯一性条件。

如果您在电子邮件列上添加唯一性约束,那么您将能够捕获两个人试图创建相同记录的情况。

于 2013-06-01T22:02:44.467 回答