2016-03-27 2 views
0

私はテーブルを登録しています。テキストボックスの3つのデータをテーブルのデータと照合して重複を検出し、各比較のために別々のポップアップメッセージを生成したいと思います。つまり、ユーザー名が既に使用されている場合は、ユーザー名が表示されます。 AdminNoとRegitrationNoの場合も同様です。 バックエンドのコードは次のとおり単一のSQLチェックと異なる結果を生成する方法

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 
      conn.Open(); 
      String str = "INSERT INTO Register (Name,AdminNo,RegisterNo,Branch,DoB,Address,Mobile,Email,Username,Password) VALUES('" + TextBoxName.Text + "','" + Convert.ToInt64(TextBoxadmin.Text) + "','" + TextBOxreg.Text + "','" + DrpBranch.SelectedItem + "','" + Convert.ToDateTime(DoB.Text) + "','" + address.Text + "','" + mobno.Text + "','" + email.Text + "','" + user.Text + "','" + pass.Text + "')"; 
      SqlCommand cmd = new SqlCommand(str, conn); 
      cmd.ExecuteNonQuery(); 

これは、テーブルへの挿入機能です。

private bool UserExist() 
{ 
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 

    SqlCommand cmd = new SqlCommand("Select * From Register Where AdminNo='"+Convert.ToInt32(TextBoxadmin.Text)+"' OR Username='"+user.Text+"' OR RegisterNo='"+TextBOxreg.Text+"'"); 
    cmd.CommandType = CommandType.Text; 
    cmd.Connection = conn; 
    conn.Open(); 
    SqlDataReader rdr; 
    rdr = cmd.ExecuteReader(); 
    if (rdr.HasRows) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
    conn.Close(); 
} 

これは私の重複チェック機能です。ここで、OR演算子で重複をチェックできます。 重複が見つかった場合はtrueが返されます。 重複を別々に見つけて別々のメッセージを表示する手段を提供してください。

+0

あなたがすべきパラメータ化されたクエリを確実に学習します。あなたのコードはSQLインジェクション攻撃のために開いています。 –

+0

ここはシンプルでクリーンですhttp://www.aspsnippets.com/Articles/Simple-User-Registration-Form-Example-in-ASPNet.aspx – banksy

答えて

0

私はC++やMS SQLのエキスパートではありませんが、この解決策が役立つと思います。構文が正しくない場合は謝罪します(私はそれを確認する簡単な方法はありません)ので、必要に応じて自由に適応してください、という考え方は次のとおりです。次のようにSQLステートメントを変更します:

select 
case 
    when 
     AdminNo='"+Convert.ToInt32(TextBoxadmin.Text)+"'" 
    then 
     CAST(1 AS BIT) 
    else 
     CAST(0 AS BIT) 
end as AdminYes, 

case 
    when 
     Username='"+user.Text+"'" 
    then 
     CAST(1 AS BIT) 
    else 
     CAST(0 AS BIT) 
end as UsernameYes, 

case 
    when 
     RegisterNo='"+TextBOxreg.Text+"'" 
    then 
     CAST(1 AS BIT) 
    else 
     CAST(0 AS BIT) 
end as RegisterNoYes 
From Register Where AdminNo='"+Convert.ToInt32(TextBoxadmin.Text)+"' OR Username='"+user.Text+"' OR RegisterNo='"+TextBOxreg.Text+"'" 

あなたはあなたにこのクエリを実行します:shatement

SqlCommand cmd = new SqlCommand(sqlStatement); 

SQLStatementのは、私は上記の投稿何です。次に、リーダーで作業するときに、rdr.getBoolean(0)がtrueを返したらそれをチェックすることができます。管理者の重複を取得したことを意味します。rdr.getBoolean(1)をtrueにすると、 rdr.getBoolean(3)がtrueに等しい場合、それはRegiserNo重複です。

+0

ありがとうございましたが、私はAdminYesの意味を理解できませんでした、UsernameYes、RegisterNoYes。私は結果を表示するために値を.NETクラスに渡すのが好きです。私はそれがこのSQLクエリを渡すことはできないと思う。たとえば、ユーザー名が重複している場合、int strを1に設定します。 – FaheemMCFC

+0

上記の編集を参照してください。 AdminYes、UsernameYes、RegisterNoYesの名前は本当に重要ではありません。ポイントは、あなたのコードで、それらのブール値をチェックできることです。 – artybug

+0

私はそれをチェックします。私はSQLとはうまく動作しません。ありがとうございます@Artur Charukhchyan – FaheemMCFC

0

ストアドプロシージャを作成し、パラメータとして@AdminNo、@ UserNameおよび@ RegisterNoを渡す必要があります。
、カスタムユーザー定義型 - - ストアドプロシージャはどちらか を返すことができ、XMLの内容をvarchar型(最大)、または
- 普通のテーブルの結果は を設定し、実際のフォーマットは「限りすることができますように重要ではありません。 「テーブル(ないスカラー応答)

にSPROCを渡す

Select 'AdminNo' as [FieldName], count(*) as [CountOfRecords] From Register Where AdminNo = @AdminNo 
UNION ALL 
Select 'UserName', count(*) From Register Where UserName = @UserName 
UNION ALL 
Select 'RegisterNo', count(*) From Register Where RegisterNo = @RegisterNo 

の線に沿って何かを行うことができますし、あなたのUserExistルーチンで、あなたはExecuteReaderのに持っていると、すべての行を読み取ります。 あなたは常に3行(AdminNoに1つ、ユーザ名の1、およびRegisterNoに1つ)を持つことになります、そしてあなたは、各行の数を使用することができます - 数> 0は重複があるかどう

0
using System; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 

namespace DemoNameSpace 
{ 
    public class DemoClassDAL 
    { 
     private CheckResult UserExist() 
     { 
      CheckResult result = CheckResult.NoDuplicate; 

      using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString)) 
      { 
       SqlCommand cmd = new SqlCommand(@"select top 1 
                case 
                 when AdminNo = @AdminNo then 'AdminExists' 
                 when Username = @UserName then 'UserExists' 
                 when RegisterNo = @RegisterNo then 'RegisterNoExists' 
                end as Result 
                From Register"); 
       cmd.CommandType = CommandType.Text; 
       cmd.Connection = conn; 
       conn.Open(); 

       var dbresult = cmd.ExecuteScalar(); 
       conn.Close(); 

       if (dbresult != DBNull.Value) 
       { 
        Enum.TryParse(dbresult.ToString(), out result); 
       } 
      } 

      return result; 
     } 
    } 

    public enum CheckResult 
    { 
     NoDuplicate, 
     AdminExists, 
     UserExists, 
     RegisterNoExists 
    } 
} 
関連する問題