linqからsql:executequeryパラメーター化されたクエリを実行するときに機能しない

StackOverflow https://stackoverflow.com/questions/2918530

  •  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をキャプチャして確認できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top