1

SqlParameters で使用しようとしている生の SQL クエリがあります。(文字列連結を使用して)安全でないクエリを作成すると、問題なく動作します...結果が得られます。この場合、10 を取得します。

SQL パラメータを使用しようとすると、レコードがゼロになります。@ の有無にかかわらずパラメーターを作成しようとしました。それらを への呼び出しで個別に追加しようとしましたQuery。また、Sql パラメーターの代わりにオブジェクト パラメーターを試しました。私は1つだけを使用してみました....そして、何をしても、SQLパラメーターを使用して結果を取得できないようです。文字列連結のみです。

エンティティ フレームワークの SQL クエリは SQL パラメータでどのように機能しますか? また、使用しているクエリが機能しないのはなぜですか?

コード例:

string query = "WITH OrderedItems AS " +
               "(" +
               "SELECT *, " +
               "ROW_NUMBER() OVER (ORDER BY @p0) AS 'RowNumber' " +
               "FROM ITEMS" +
               " WHERE item_name LIKE '%@p1%'" +
               ")" +
               "SELECT * FROM OrderedItems" +
               " WHERE RowNumber BETWEEN " + (skip + 1) + " AND " + (skip + take);

// I have tried using @p0 and @p1 as the parameter names here
var parameters = new object[] {new SqlParameter("p0", orderBy), new SqlParameter("p1", model.item_name)};

var context = new DbEntities();
// I have tried only using one and passing it too
List<item> result = context.items.SqlQuery(query, parameters).ToList();
4

4 に答える 4

1

あなたはおそらく ORDER BY 列名です。なぜこれにパラメーターを使用しているのですか。おそらく、問題は p0 パラメータに起因します。orderBy の値は何ですか 有効な列ですか?!

また、次を使用できます。

string p = @"

";

この場合、'+' をそれほど多く追加する必要はありません。また、パラメーターとしてスキップとテイクを追加します

于 2014-08-19T18:45:55.037 に答える