2016-04-19 9 views
-1

私はC#とデータベースでは新しいです。私は人からデータを追加するデータベースを作った。実際には、アカウントを作成した人のデータです。電子メールに電子メール構造があり、パスワードが再入力パスワードと同じかどうかを確認しました。データベースC#のユーザ名を確認する方法は?

if (Pass.Text != Rpass.Text) 
     { 
      MessageBox.Show("Password don't match!"); 
      return; 
     } 
     string emailCheck = Email.Text; 

     bool valid = false; 
     int count_dot = 0; 

     for (int i = 0; i < emailCheck.Length; i++) 
      if (emailCheck[i] == '@') valid = true; 
      else if (emailCheck[i] == '.') count_dot++; 

     if (valid == false || count_dot == 0) 
     { 
      MessageBox.Show("Invalid email!"); 
      return; 
     } 
     con = new SqlConnection(@"Data Source=MARIA-PC;Initial Catalog=Account;Integrated Security=True"); 
     con.Open(); 
     cmd = new SqlCommand("INSERT into [dbo].[Cont1] (Username,Password,First_name,Last_name,Birth_year,Email,Work_type) VALUES (@Username,@Password,@First_name,@Last_name,@Birth_year,@Email,@Work_type)", con); 
     cmd.Parameters.Add("@Username", Username.Text); 
     cmd.Parameters.Add("@Password", Password.Text); 
     cmd.Parameters.Add("@First_name", First_name.Text); 
     cmd.Parameters.Add("@Last_name", Last_name.Text); 
     cmd.Parameters.Add("@Birth_year", DateTime.Parse(Birth_year.Text)); 
     cmd.Parameters.Add("@Email", Email.Text); 
     cmd.Parameters.Add("@Work_type", Work_tpye.SelectedItem.ToString()); 
     cmd.ExecuteNonQuery(); 

     con.Close(); 

だから、私がやりたいことは、私はすでにデータベース内のユーザー名を持っている場合は、データベースに追加する前に、チェックすることです:ここでは、コードを持っています。私は何をしなければならないかというアイディアを持っていますが、どうやってやるのか分かりません。

+1

あなたのメソッドを小さなメソッドに分割することをお勧めします - 今は少なくとも3つのメソッドを実行しているので、4番目のメソッドを追加するとさらに複雑になります。 –

+0

あなたの質問に答えるには、既存の行をチェックするクエリを作成します( 'SELECT 1 FROM Users where userName = @ UserName'など)。クエリを実行して結果を確認します。 –

+0

http://stackoverflow.com/questions/24098263/check-if-username-exists-in-database – Dejan

答えて

0

SQLコマンドテキストを更新してよりスマートにします。 EX用)

declare @p_user_name varchar(10) = 'test' 

IF(NOT EXISTS(SELECT 1 FROM Users Where userName = @p_user_name)) 
BEGIN 

    INSERT INTO Users(name) 
    VALUES (@p_user_name) 
END 
+0

ログイン名が使用中。 OPはフィードバックを提供する必要があります。 – dlatikay

+0

申し訳ありません。私はソリューション全体を読み書きするのは怠惰でした。 TSQLを使用してロジックを実装できるということです。 – dfdsfdsfsdf

0

あなたは2つのオプションがあります。

あなたのユーザ名と同じユーザ名とレジスタのカウント1-入手:結果はその後、0よりも大きい場合

Query: "SELECT COUNT(*) FROM [dbo].[Cont1] WHERE [email protected]" 

をユーザーはすでに耳を傾けています。

2 - Usernameフィールドに一意のインデックスを作成します(これは推奨される方法です)。ユーザー名がすでに使用されている場合は、重複するキーに関する例外が発生します。

+0

あなたは数えたくない(*)。カウントする(1)。 – dfdsfdsfsdf

+0

@KMCカウント(1)?それは常に1を返すでしょうか? count()は入力としてフィールド名を取りますが、定数を指定します。 – Gusman

+0

count(1)はインデックスにヒットしません。 *を使用すると、オプティマイザは*がすべての列であることを解決する必要があります。 – dfdsfdsfsdf

1

Mergeコマンドをご覧ください。ウェブには他にも多くのチュートリアルがあります。

関連する問題