2012-02-23 25 views
-2

ユーザがログインできるWebサイトがあります。クライアントは、特定のユーザがログインした回数を記録する方法が必要です。テーブルに「カウンタ」行があります。ユーザーがログインしたときにカウンターを更新するには、C#ASP.NETで構築されたアプリケーションをどのようにプログラムするのですか?このコードが正しいです:ユーザログイン時にMySqlカウンタを更新する

cmd.ExecuteNonQuery =「brokercenter FROM UPDATEカウンターが」

私は最近(今月の10日のように)卒業ので、私はこれに新しいです、プラス私はデータベースについて何も知りません私は仕事で学んでいるだけです。他のパラメータや接続文字列などが必要な場合は教えてください。これはボタンクリックイベントにあり、ユーザー名とパスワードをチェックするための接続文字列が既に存在するので、別の接続文字列が必要ではないと思うが、確かにわからない。前もって感謝します!そのことについては

は、ここでのイベント全体では(ログインのものが正常に動作し、ちょうど更新は私の質問である)である:

「myCounterは、」ローカルカウンタ変数である(はず
string connectionString =   
    ConfigurationManager.ConnectionStrings["moverschoiceConnectionString"].ConnectionString;  
OdbcConnection conn = new OdbcConnection(connectionString); 
conn.Open(); OdbcCommand cmd = new OdbcCommand(); 
cmd.Connection = conn; 
cmd.CommandText = "select Email, Password from brokercenter where Email = '" + txtLoginEmail.Text + "'"; 
OdbcDataReader reader = cmd.ExecuteReader(); 

while(reader.Read()) 
{  
    if (reader["Password"].ToString() == txtLoginPassword.Text)  
    {   
     reader.Close(); 
     if (cbRememberMe.Checked == true) 
     { 
      Response.Cookies["username"].Value = txtLoginEmail.Text; 
      Response.Cookies["username"].Expires = DateTime.Now.AddMonths(1); 
      Response.Cookies["password"].Value = txtLoginPassword.Text; 
      Response.Cookies["password"].Expires = DateTime.Now.AddMonths(1); 
     } 
     else 
     { 
      Response.Cookies["username"].Expires = DateTime.Now.AddMonths(-1); 
      Response.Cookies["password"].Expires = DateTime.Now.AddMonths(-1); 
     } 

      Response.Redirect("BrokerResources.aspx");  
     }  
     else  
     {   
      lblLoginError.Text = "Invalid Password";  
     } 
    } 
    lblLoginError.Text = "Invalid Email or Password";  
    reader.Close(); 

    cmd.ExecuteNonQuery = "UPDATE counter FROM brokercenter"; 
} 
+1

最初に基本的なSQL構文(http://en.wikipedia.org/wiki/SQL#Queries)を読んで、壊れたコードを修正するのに役立つかもしれませんが(提供していれば)、ここにはありません基本のためのあなたの教師になる。 –

+0

これは人を助けるコミュニティだと思って申し訳ありません。私はあなたに私の隣に座ってデータベースを教えることを求めていませんが(私は気にしませんが、笑)、私は助けを求めています。私はこれをやる方法がわからず、私をウィキペディアに導いて私をさらに混乱させます。私のコードは、それが動作しないことで壊れたと考えて、hehe。 –

+0

は更新クエリの構文を読み上げると、カウンタが更新されない理由がわかります(ヒント:適切なクエリを記述していないためです)。 –

答えて

-1
cmd.ExecuteNonQuery = String.Format("UPDATE brokercenter SET counter = {0} WHERE Email = {1}", myCounter++, txtLoginEmail.Text); 

データベースからも読み取られます)。これは今意味があるのですか?

+0

はい、ありがとうございます。他のポスターが示唆していたように私は更新クエリを読んでいましたが、大部分は再実行していましたが、ExecuteNonQueryは私を混乱させていました。ありがとうございました! –

+0

-1です:それはSQLインジェクションに脆弱です(私の答えを見てください)。 b) 'Email'は文字列であるため、書かれたとおりに動作しません。 c)C#でカウンタ変数を増やすことは、SQLテーブルの値を更新する最善の方法ではありません。 –

+0

優秀なフィードバック、クリスチャン!!私が実際に試していたのは、クイック・ポイントを作って@ hammer.prを取得することでした... – lkaradashkov

3

MySQL's Reference ManualにはUPDATEを使用してください。

あなたがしたいことを正確に示す例もあります。リンクから
引用:あなたは式に更新されるテーブルの列にアクセスする場合

、 UPDATEは列の現在の値を使用しています。これは、基本的にはあなたが必要とするすべてである

UPDATE t1 SET col1 = col1 + 1; 

、あなただけのユーザー名または電子メールのWHERE句とフィルタを追加する必要があります。たとえば、 次の文は、現在の値よりも1以上にcol1の設定します。

プラス、あなたはおよそSQL Injectionこのためにをお読みください:リンクで説明したようにパラメータを渡すために、このような文字列を連結する

where Email = '" + txtLoginEmail.Text + "'"; 

は、問題を引き起こす可能性があります。
Here's an exampleそれをより良くする方法。

+0

そこにcmd.ExecuteNonQueryの部分は必要ありませんか?私はそれが増えていくと思った。 –

+0

はい、** ExecuteNonQueryが必要です。あなたの主な問題は、UPDATEクエリを正しく取得する方法(質問に投稿したものが有効なSQLではない)です。しかし、実際に**クエリを実行するには 'ExecuteNonQuery'が必要です。 –

+0

私が思ったように、それだけで確認しています。あなたのすべての助けをいただきありがとうございます!私は、このプロジェクトでやっているパズルの一部です。 –

関連する問題