1

ログインページがあり、ユーザーには ID があり、ID はテーブルの主キーです。管理者アカウントも持っており、管理者はユーザーを作成できます。しかし、既存の ID でユーザー アカウントを作成すると、Web ページがクラッシュします。この状況を処理し、この 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

複数の方法があります。例外をキャッチして、エラー メッセージを表示できます。これは、接続の切断など、他のエラー シナリオにも役立ちます。

ただし、通常の運用中に発生すると予想される状況の場合は、例外なしで状況を処理する必要があります。これを行う1つの方法はinsert、 new を持つ行を挿入するだけ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 を持つユーザーを追加しようとしたときに返されるエラーを処理するのではなく、最初にユーザーの存在を確認し、可能であれば新しいアカウントのみを作成することをお勧めします。ただし、2 人のユーザーが同じレコードを作成しようとした場合に対応するために、例外を処理する必要があります。

したがって、次の SQL になります。

select * from StudentTable where ID = @newID

これでレコードが見つかった場合は、エラーを報告できます。何も見つからない場合は、先に進んで新しいレコードを作成できます。

ただし、ID を主キーとして使用している場合は、それをテーブルのIdentity列として使用し、新しい行を作成するときに自動インクリメントする方がよいでしょう。学生がすでに存在するかどうかを確認する必要があります。人間が読み取れる一意性の条件として電子メールを使用してください。

電子メール列に一意性制約を追加すると、2 人のユーザーが同じレコードを作成しようとするケースをトラップできます。

于 2013-06-01T22:02:44.467 に答える