linqからsql:executequeryパラメーター化されたクエリを実行するときに機能しない
-
04-10-2019 - |
質問
パラメーター化されたクエリを実行するときに機能しないという点で、ExecuteQueryに奇妙な問題があります。
以下は1レコードを返します:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = 'Marina2'");
ただし、パラメーター化されたバージョンは結果を返しません。
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = '{0}'", "Marina2");
私は何が間違っているのですか?
解決
試す:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = {0}", "Marina2");
PARAMに引用符がないことに注意してください。 Linq to SQLは、引用符でフォーマットするために自動的に把握します。
に従って MSDN:
パラメーターは、console.writeline()およびstring.format()で使用されているのと同じカーリー表記を使用して、クエリテキストで表されます。実際、String.Format()は、実際には提供するクエリ文字列で呼び出され、 @P0、 @P1…、@P(n)などの生成されたパラメーター名を縮小したパラメーターに置き換えます。
ですから、あなたが引用符を残した場合、あなたが一致していただろう [Username] = '@p0'
ただし、プロファイラーを実行して、正確なSQLをキャプチャして確認できます。
所属していません StackOverflow