2016-06-22 4 views
-1

ユーザーデータをSQL Serverデータベースにアップロードするユーザー登録ページを作成しようとしています。私は、ユーザー名がすでに存在するかどうかをチェックして、それが作成されないようにする機能を持っています。私は姓、名、ユーザー名などで新しいユーザーを作成することができます。データベースを更新しますが、データベースに既に存在するユーザー名を持つユーザーを作成できません。ここに私のコードは次のとおりです。ASP.NET SQL Serverデータベースから正しく読み取るかどうかわからない

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (IsPostBack) 
    { 
     //connect registration form to database 
     SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["sandboxConnectionStringUserData"].ConnectionString); 

     conn.Open(); //open connection 
     //SQL Query 
     string checkUserName = "select count(*) from UserData where UserName='"+TextBoxUserName.Text+"'";//checks if username is already there 
     SqlCommand command = new SqlCommand(checkUserName, conn); 
     int temp = Convert.ToInt32(command.ExecuteScalar().ToString()); 
     if(temp == 1) 
     { 
      Response.Write("User name already exists"); 
     } 
     conn.Close(); //close the database 

    } 
} 

私はデバッグを試してみましたが、一時の値が1

感謝に変わることはありません!

+2

@ !!!! @ @ !@ !,サブミットされたフィールドの直接入力を取って動的SQL文に直接追加することはありません。そのテキストボックス内の特定のエントリを持つデータベース全体を簡単に削除できます。決してこれをしない!!!!! –

答えて

1

UNIQUE制約をusername列に追加し、アプリでsql例外を処理するだけです。さらに、ユーザー名を引数とし、テーブルに存在を確認し、フォームがソートされた後で、挿入(save())が発生する前にサーバー側の検証でSPを使用することができます。そうすれば、SQL例外が発生する可能性は低くなりますが、SQL例外が発生した場合でも処理できます。

フォームのデータを生のSQLクエリに追加する現在の方法は、SQLインジェクションまであなたを開きます。パラメータ化されたクエリを代わりに使用します。

0

UserName列にUNIQUE constraintを作成するとよいスタートです。また、ユーザーの存在と挿入または更新をチェックするストアドプロシージャを作成し、コードをより効率的に構造化します。ユーザー名はパラメータとして渡す必要があり、接続オブジェクトを適切に処分する必要があります。

例として、あなたのストアドプロシージャは、次のようになります。

CREATE PROCEDURE dbo.uspUserData @userName VARCHAR(50) 
AS 
BEGIN 
IF EXISTS(SELECT 1 FROM dbo.UserData WITH(NOLOCK) 
      WHERE UserName = @userName) 
    BEGIN 
     -- update 
    END 
ELSE 
    BEGIN 
     -- insert 
    END 
END 

そして、あなたの.NETコードは次のようになります!これを行うべきではありません

 using (
       SqlConnection conn = 
        new SqlConnection(
         ConfigurationManager.ConnectionStrings["sandboxConnectionStringUserData"].ConnectionString)) 
      { 
       using (SqlCommand cmd = new SqlCommand("uspUserData", conn)) 
       { 
        cmd.CommandType = CommandType.StoredProcedure; 
        cmd.Parameters.Add("@UserName", SqlDbType.VarChar).Value = TextBoxUserName.Text; 
        conn.Open(); 
        cmd.ExecuteNonQuery(); 
       } 
      } 
関連する問題