2012-01-17 18 views
0
SqlCommand command = new SqlCommand("SELECT * FROM users WHERE Username = ? AND Password = ?", connection); 
command.Parameters.AddWithValue("Username", username); 
command.Parameters.AddWithValue("Password", password); 
SqlDataReader reader = null; 
reader = command.ExecuteReader(); 

私はプログラムを実行すると、私は近くSqlCommandオブジェクトAddWithValue

不適切な構文を取得します '?'。

この行で

reader = command.ExecuteReader(); 

、誰もが - 私が間違っているのかを見ることができますか?

+1

は、SQL Server上で実行されているクエリです。これはちょうど標準のクエリかストアドプロシージャの場合はこれがStoredProcedureに対して実行されます。「ユーザー名」を「@ユーザー名」に、「パスワード」を「@パスワード」に変更してください – MethodMan

答えて

7
using(SqlCommand command = new SqlCommand("SELECT * FROM users WHERE Username = @Username AND Password = @Password", connection)) 
{ 
    command.Parameters.AddWithValue("@Username", username); 
    command.Parameters.AddWithValue("@Password", password); 
    using(SqlDataReader reader = command.ExecuteReader()) 
    { 
    while(reader.Read()) 
    { 
     //do actual works 
    } 
    } 
} 

は必要ありませんusingキーワードで改善したが、あなたは、SQL上に読みたいかもしれません

+0

ありがとうございます! – user1151471

+0

よく追加する価値があります。if((reader.HasRows)&&(reader.Read())){} – Lloyd

+1

@Lloyd:その必要はありません。 'reader.HasRows()'が 'false'を返す場合、' reader.Read() 'も同様です。 – Will

1
SqlCommand command = new SqlCommand(
    "SELECT * FROM users WHERE Username = @Username AND Password = @Password", 
    connection); 
command.Parameters.AddWithValue("Username", username); 
command.Parameters.AddWithValue("Password", password); 
SqlDataReader reader = null; 
reader = command.ExecuteReader(); 

をお勧めします。

1

どのDBMSを使用していますか? SQL Serverを使用している場合は、クエリの構文が正しくありません。あなたは必要があります:

SqlCommand cmd = 
    new SqlCommand(@"select * 
        from users 
        where username = @username and password = @password"); 

command.Parameters.AddWithValue("@username", username); 
command.Parameters.AddWithValue("@password", password); 
関連する問題