2

パラメータ化されたクエリを実行するときに 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");

私は何を間違っていますか?

4

1 に答える 1

2

試す:

db.ExecuteQuery<Member>(@"SELECT *  
    FROM Member 
    INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId 
    WHERE [aspnet_Users].[UserName] = {0}", "Marina2"); 

パラメータに引用符がないことに注意してください。Linq to SQL は、引用符でフォーマットすることを自動的に認識します。

MSDNによると:

パラメーターは、Console.WriteLine() および String.Format() で使用されるのと同じカーリー表記を使用して、クエリ テキストで表現されます。実際、String.Format() は、指定したクエリ文字列に対して実際に呼び出され、中括弧で囲まれたパラメーターを、@p0、@p1 …、@p(n) などの生成されたパラメーター名に置き換えます。

それに基づいて、引用符を残した場合は一致し[Username] = '@p0'ますが、プロファイラーを実行して正確な SQL をキャプチャして確認することができます。

于 2010-05-27T04:47:21.623 に答える