2016-10-10 7 views
0

Visual Studio 2015で初めてのWebサイトプロジェクトです。Username、Password、Email、Countryのようなユーザー情報を含むSQLデータベースを作成しました。また、新しいユーザーがそこに詳細を入力できるユーザー登録ページを作成しました。これらの詳細がデータベースに追加されます。これはすべて正常に動作します。ウェブサイトのパスワードとユーザー名を確認する方法

しかし、私はロードマップでユーザー名とパスワードを検証して、SQLデータベースのユーザーデータを含む行に格納された値に対してユーザーがメンバーのみのページにアクセスできるようにしようとしました。

Heresユーザーがログインボタンをクリックしたときのコードスニペット。

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MembersConnectionString"].ConnectionString); 
     con.Open(); 
     string checkUser = "SELECT * FROM Members where Username= '" + TextBoxSignUser.Text + "' and Password= '" + TextBoxSignPass.Text + "'"; 
     SqlCommand cmd = new SqlCommand(checkUser, con); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 

私は何をする必要があるかを知っているが、おそらく以下この擬似コードのようなものですが、私は、データベースに格納された値に対して、この情報を有効に取り掛かるする方法がわからないと思います。

if ("Username" and "Password" == the value of Username and Password TextBox.Text) 
{ 
     Response.Write("Sign in successful"); 
     Response.Redirect("MemberTestPage.aspx"); 
} 
else 
{ 
Response.Write("Details incorrect, Please try again") 
} 
+1

あなたは完全にSQLインジェクションやパスワードのハッシュ化の概念を理解するまで、ユーザーとパスワードに関するコードを書いてみるべきではありません。 –

+0

こんにちはPeterさん、この例は、簡単なログインプログラムを使用するためのものです。情報を安全に保存できることがわかるまで、重要なデータはデータベースに保存されません。私はすでにパスワードハッシュ技術とSQLインジェクションを回避する方法について学び始めています。 アドバイスありがとうございます – lostintranslation

答えて

0

あなたは、クエリの戻り値を取得し、あなたが好き使用できるパラメータ

 DataTable Dt = new Datatable(); 
     SqlDataAdapter sda = new SqlDataAdapter(cmd); 
     sda.Fill(dt); 

     if (dt.rows.count > 0) 
     { 
      //MATCH FOUND 
     } 
0

を一致させることができ、データ・テーブルにデータを取得するデータアダプタ1を使用して、データ・テーブルを埋めます。 。

string query= "SELECT * FROM Members where Username= 'usr' and Password= 'pwd'"; 
    SqlCommand cmd = new SqlCommand(query, con); 
    MySqlDataAdapter objda = new MySqlDataAdapter(cmd); 
    DataSet objDs = new DataSet(); 
    objda.Fill(objDs); 
    if(objDs.Tables[0].Rows.Count>0) 
    { 
      Response.Write("Sign in successful"); 
      Response.Redirect("MemberTestPage.aspx"); 
    } 
0

あなたは、データセットを使用せずに、次のよう

var con = new SqlConnection("your connection string goes here"); 
SqlCommand cmd = new SqlCommand("SELECT * FROM Members where Username= 'usr' and Password= 'pwd'", con); 
bool result = false; 
cmd.Connection.Open(); 
using (cmd.Connection) 
{ 
    SqlDataReader dr = cmd.ExecuteReader(); 
    if (dr.HasRows) 
     result = true; 
} 
if (result == true) 
    // Login successful 
else 
    // Login failed 
を行うことができます
1

まず、最高のパフォーマンスと高いセキュリティのような理由で、ADO.NETライブラリを使用する方がよいと思います。ここに私の提案があります。あなたのために有用であると願っています:

using System.Data.SqlClient; 
... 

string conStr = ConfigurationManager.ConnectionStrings["MembersConnectionString"].ConnectionString; 
string sql = "SELECT * FROM Members where Username = @user and Password = @pass"; 
SqlParameter pUser = new SqlParameter("@user", TextBoxSignUser.Text); 
SqlParameter pPass = new SqlParameter("@pass", TextBoxSignPass.Text); 
using (SqlConnection con = new SqlConnection(conStr)) 
{ 
    using (SqlCommand cmd = new SqlCommand(sql, con)) 
    { 
     cmd.Parameters.Add(pUser); 
     cmd.Parameters.Add(pPass); 

     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      if (reader.Read()) 
      { 
       // Successfully signed in 
       // Also you can access your fields' value using: 
       // 1. its index (e.x. reader[0]) 
       // 2. or its name: (e.x. reader["Username"]) 
      } 
      else 
      { 
       // Login failed 
      } 
     } 
    } 
} 
+0

ありがとうございましたAmin、素晴らしい提案と非常に役立つ – lostintranslation

+0

あなたを歓迎します;) – Amin

0
string query = string.Format("SELECT TOP 1 * FROM [Table] WHERE Username = '{0}' and Password = '{1}'", txtUsername.Text, txtPassword.Text); 
command = new OleDbCommand(query, con); 
var reader = command.ExecuteReader(); 

if (reader.HasRows) 
{ 
    //successfully login 
} 
else 
    //error message 
関連する問題