0

C# を使用して asp.net で Web アプリケーションを構築しています。ユーザーが登録してからログインできるフォームがあります。ユーザーが選択した名前が「既に存在する」かどうかをWebアプリに認識させるのに問題があります。既に存在する場合、同じ名前を挿入して「ユーザー名が既に存在します」というメッセージを表示するべきではありません。私は試してみましたSqlDataReaderが、運がありません。

protected void Register_Button_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BJ_Player_String"].ToString());
        SqlCommand cmd = new SqlCommand();
        SqlCommand cmd2 = new SqlCommand();
        SqlDataReader data_reader;
        String name = TextBox2.Text;
        String date = TextBox3.Text;


        try
        {
            conn.Open();
            cmd = new SqlCommand("Insert into BJ_Player (Player_Name, D_O_B) Values (@Player_name, @D_O_B)", conn);
            cmd = new SqlCommand("Select Player_Name from BJ_Player WHERE Player_Name = @Player_name", conn);
            cmd.Parameters.Add("@Player_name", SqlDbType.NVarChar).Value = name;
            cmd.Parameters.Add("@D_O_B", SqlDbType.Date).Value = date;
            cmd.Connection = conn;
            data_reader = cmd.ExecuteReader();
            cmd.ExecuteNonQuery();

            if (data_reader.HasRows)
            {
                lblPlayerNameExists.Visible = true;
            }
            else
            {
                // do nothing
            }    
        }
4

5 に答える 5

2

Player_Name をデータベース内で一意にすると、挿入しようとすると例外が発生します。一意の制約を使用する必要があります。コマンドタイプも指定し、両方のクエリが同じ cmd オブジェクトに割り当てられていることを確認する必要があります

于 2012-04-14T18:27:18.273 に答える
1

コードでDBにデータを挿入し、名前が同じかどうかを調べています。最初にDBで名前を検索し、その名前のレコードがない場合は、レコードを追加する必要があります。

于 2012-04-14T18:54:57.330 に答える
0

これには、merge ステートメントを使用すると役立つ場合があります。Merge は、ソース テーブルとの結合の結果に基づいて、ターゲット テーブルに対して挿入、更新、または削除操作を実行します。

基本的に、必要に応じて挿入し、必要に応じて更新します。多くの場合、アップサートと呼ばれます。しかし、それは仕事を成し遂げます。

これは、マージの使用方法を説明するサイトへのリンクです。良い記事のように見えます。 http://www.kodyaz.com/articles/sql-server-2008-t-sql-merge-statement-example.aspx

于 2012-04-14T19:34:23.363 に答える
0

それを行うためのモデル関数を書きたい場合は、

  1. 2番目の方法とかなり似ているajaxチェックのためにそのままにしておきます
  2. 「Select username from DB-table」を発行してユーザー名を取得し、ビューを表示して問題がある場合はそれを報告するか、ユーザーに「この名前は有効です」と通知するメッセージを表示する前に、ユーザー名の入力をチェックします。
于 2012-04-14T18:50:19.823 に答える
0

私は通常、次の 2 つの方法のいずれかでそれを行います。

  1. 名前の一意性をチェックし、問題がなければ新しいレコードを挿入するストアド プロシージャを作成します。チェックする数値コードとしてステータスを返す必要があります。
  2. 検証プロセスの一部として使用して保存する前に、名前の一意性を確認してください。
于 2012-04-14T18:53:30.583 に答える