私は簡単なSqlConnection
コードを持っています。HASHBYTESという機能を持っていますので、サーバーからデータを取得できます。SqlCommandがHASHBYTES関数内でパラメータを渡さないのはなぜですか?
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
using (var command = new SqlCommand(commandString, connection))
{
command.Parameters.Add(new SqlParameter("mail", email));
command.Parameters.Add(new SqlParameter("password", password));
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
return true;
}
throw new InvalidDataException();
}
}
}
プロパティをのCommandString は次のようになります。
DECLARE @pass varchar(50);
SET @pass = @password;
DECLARE @pwdHash varbinary(max);
SET @pwdHash = HASHBYTES('SHA2_256', @pass);
SELECT * FROM Users
WHERE [email protected] AND [email protected];
このコードは動作しますが、なぜ仕事下記の短いコードではないでしょうか?
以下のケースでは、関数はwhileループの内部にはなく、代わりに例外をスローします。これらのコードの両方で
DECLARE @pwdHash varbinary(max);
SET @pwdHash = HASHBYTES('SHA2_256', @password);
SELECT * FROM Users
WHERE [email protected] AND [email protected];
、@password値はSqlParameter
として設定されているので、それが動作するはず、右?または私は何かを逃していますか?
実行時の実際の違いは何ですか? 「うまくいきません」とは記述的なものではありません。それはクラッシュする/例外をスローしますか?ゼロを返しますか? – Dai
どのようなエラーがありましたか? –
申し訳ありませんが、上のコードではtrueを返し、下のコードではwhileループにヒットしないため、例外がスローされます。 –