0

C#を使用してクエリを実行していますSqlCommand。クエリの 1 つは期待どおりに実行されますが、複雑にすると、意味をなさないような奇妙な結果が得られます。このコミュニティの誰かが、今の私よりも理解を深めてくれることを願っています。

以下のコードは正常に実行され、指定されたテキストを含むタイトルのレコードが検索されます。

comm.CommandText = "SELECT * FROM tbl_records WHERE Title LIKE '%' + @title + '%'";
comm.Parameters.AddWithValue("id", Request.QueryString["idortitle"]);
comm.Parameters.AddWithValue("title", Request.QueryString["idortitle"]);

ただし、以下のセクションを追加すると、id に一致する結果のみが返されます。タイトルと部分的に一致する結果は除外されます。なぜこうなった?

comm.CommandText = "SELECT * FROM tbl_records WHERE Title LIKE '%' + @title + '%' OR Id=@id";
comm.Parameters.AddWithValue("id", Request.QueryString["idortitle"]);
comm.Parameters.AddWithValue("title", Request.QueryString["idortitle"]);
4

3 に答える 3

1

ワイルドカードをクエリで使用する代わりに、パラメータの値に配置してみてください。

comm.CommandText = "SELECT * FROM tbl_records WHERE (Title LIKE @title) OR (Id=@id)";
comm.Parameters.AddWithValue("@id", Request.QueryString["idortitle"]);
comm.Parameters.AddWithValue("@title", "%" + Request.QueryString["idortitle"] + "%");
于 2012-10-30T18:40:09.833 に答える
0

代わりに、次のコードを試してください。

comm.CommandText = "SELECT * FROM tbl_records WHERE Title LIKE '%@title%' OR Id = @id";
comm.Parameters.AddWithValue("@id", Request.QueryString["idortitle"]);
comm.Parameters.AddWithValue("@title", Request.QueryString["idortitle"]);
于 2012-10-30T18:39:48.460 に答える
0

基になっているパラメータが数値ではなく、id フィールドが数値であるため、エラーをスローせずにクエリがエラーになっていました。ID フィールドに対するチェックに数値応答のみが使用されるようにチェックを追加すると、コードは機能します。以下のコードを参照してください。

int x;

            comm.CommandText = "SELECT * FROM tbl_requests WHERE Title LIKE '%' + @title + '%'";
            comm.Parameters.AddWithValue("title", Request.QueryString["idortitle"]);
            if(int.TryParse(Request.QueryString["idortitle"],out x)){
                comm.CommandText += " OR RequestId=@id";
                comm.Parameters.AddWithValue("id", x);
            }
于 2012-10-30T18:49:05.887 に答える