2012-05-12 15 views
0

切断アーキテクチャでストアドプロシージャを使用せずに、C#コード内のデータベースフィールドを追加するには見ることができますようどのように私は、3ユーザーのアクセスレベルを作成する必要がどこ私はasp.netでログインページを作成する必要が

ユーザーそこにメールを表示したり、更新したり、一部のユーザーを削除したりする 管理者は、すべてを表示したり、スーパーユーザーを削除したりすることができます。ユーザー/管理者/スーパーユーザは、それが自動的にユーザーレベルに応じて、彼をリダイレクトする必要があり、ボタンをクリックしたときに

私のログインページが ユーザ名 パスワードとログインボタンを

を持っています。

私は、username、password、userid、useraccesstype、emailというデータベースを持っています。 ここで私の問題は、データベースの切断されたアーキテクチャでも、ストアドプロシージャを使用せずに、useraccesstypeに基づいてifコマンドを書く方法が得られていないことです。行の間に読ん

String Uid = TextBox1.Text; 
String Pwd = TextBox2.Text; 

SqlConnection con = new SqlConnection(@"Data Source=Sun-PC\SQLEXPRESS;Initial Catalog=dts;Persist Security Info=True;User ID=sa;Password=********;"); 
SqlDataAdapter da; 
da = new SqlDataAdapter("Select userid,password,useraccesstype from Table2 WHERE userid = " + Uid + " and password ='" + Pwd + "'", con); 
DataSet ds = new DataSet("Table2"); 
da.Fill(ds, "Table2"); 

if (Uid == "userid" && Pwd == "password") 
{ 
    if (uzrtype3 = "componentadmin") 
    { 
     Response.Redirect("userpage.aspx"); 
    } 
    if (uzrtype = "user") 
    { 
     Response.Redirect("register.aspx"); 
    } 
} 
else 
{ 
    Label123.Text = "Sorry, user not recognized - please try again"; 
} 
+6

他に何をしていても、***してください*** ***はSQLインジェクションについて学びます。あなたのコードは現時点では恐ろしく危険です。同様に、アカウントを必要としない誰かが*そのコードであなたのDBを破壊する可能性があります。また、パスワードの代わりに塩漬けされたハッシュもあります。 (質問を読むために戻る) –

+0

@マーク私はあなたが私のiPhoneを使いにくいので、私にそれを打つことがうれしいです!また、TextBox1、TextBox2などを呼び出す習慣に入らないようにしてください。怠け者なので、あなた自身が呪われてしまうでしょう。 –

+0

質問を明確にすることはできますか?タイトルに「データベースフィールドを追加する」とは何を意味しているのかは不明です(質問には明確ではありません)。また、ストアドプロシージャがその質問に関係しているかどうかは不明です。あなたは現在何をしていますか? dsetTables [0] .Rowsは、開始する場所になります(ただし、ここではすべてDataSetを使用することは過度のように見えます)。あなたは確認できますか?ここで問題となるのは、一致するかどうかを確認するだけで、そうであればuseraccesstypeの値を読み取りますか? –

答えて

1

、私はあなたが "tはuseraccesstypeを取得する方法" を求めていると思います?多分、そう現在のコードとする場合:しかし

if(ds.Tables[0].Rows.Count == 1) { 
    // match 
    var accessType = ({appropriate cast here})ds.Tables[0].Rows[0]["useraccesstype"]; 
} else { 
    // no match 
} 

!私は、様々なパラメータの問題を解決し、それがより安全作り、それを別の方法を行うだろう - (それをグーグル)便宜上、「Dapperのドット・ネット」を使用して:

string userid = .... 
string password = ... 
var row = con.Query(
    "Select useraccesstype from Table2 WHERE userid = @userid and password = @password", 
    new { userid, password }).FirstOrDefault(); 
if(row == null) { 
    // no match 
} else { 
    var accessType = ({some cast here})row.useraccesstype; 
} 

パスワードの塩漬けハッシュもあなたに何かあります見るべきである。

ユーザーID /パスワードを返すポイントはありません。既に知っています。 ExecuteScalarを使用することもできますが、パラメータを自分で処理する必要があります。

関連する問題