1

これが私の状況です。ページング、グループ化、フィルタリングを実行したい。そのため、page_init メソッドを使用しています。私のコードによると、正常に動作しています。ただし、ユーザーは where 句の条件のみを指定できます

たとえば、ページにテキストボックスがあります。そのテキストボックスID="txtQuery"で、そのテキストボックスのユーザーは次のようにwhere句を入力しitemID='45366'ます

cmd.commandText="select * from TABLE_NAME where "+txtQuery.text

これでレコードが表示されます。これが今の問題です。上記のようにするcmd.commandTextと、エラーがスローされます

System.Data.SqlClient.SqlException: 'where' 付近の構文が正しくありません。

私が直接与えると、エラーなしで正常に動作します。

これは私のコードです

string whereQuery = "";
protected void Page_Init(object sender, EventArgs e)
{
    // initialize SomeDataTable
    if (IsPostBack)
    {
        string cs = ConfigurationManager.ConnectionStrings["HQMatajerConnectionString"].ConnectionString;
        whereQuery = getWhereQuery();
        //Response.Write("<br/><br/><br/><br/>" + whereQuery);
        using (SqlConnection con = new SqlConnection(cs))
        {
            string query = @"select transactions.storeid as StoreID, YEAR(transactions.Time) Year, MONTH(transactions.Time) Month, 
                        transactionsEntry.TransactionNumber,transactionsEntry.Quantity,
                        items.ItemLookupCode,items.DepartmentID,items.CategoryID,items.SubDescription1,
                        suppliers.SupplierName,suppliers.Code
                        FROM        [HQMatajer].[dbo].[Transaction] as transactions
                        RIGHT JOIN  [HQMatajer].[dbo].[TransactionEntry] as transactionsEntry
                        ON transactions.TransactionNumber=transactionsEntry.TransactionNumber 
                        INNER JOIN  [HQMatajer].[dbo].[Item] as items
                        ON transactionsEntry.ItemID=items.ID
                        INNER JOIN  [HQMatajer].[dbo].[Supplier] as suppliers
                        ON items.SupplierID=suppliers.ID
                        where  "+whereQuery;  //I tried with txtQuery.text as well it doesn't work

            SqlCommand cmd = new SqlCommand();



            cmd.Connection = con;
            cmd.CommandText = query;
            con.Open();

            SqlDataAdapter sda = new SqlDataAdapter(cmd);

            sda.Fill(ds);
            //SqlDataReader rd = cmd.ExecuteReader();

            //ASPxGridView1.Columns.Clear();
            ASPxGridView1.AutoGenerateColumns = true;
            ASPxGridView1.DataSource = ds;
            ASPxGridView1.DataBind();
        }
    }

}


protected string getWhereQuery()
{
    string query = txtQuery.Text;
    return query;
}
4

1 に答える 1

2

デフォルトでは (最初のページ読み込み時)、txtQuery.Text は空です。getWhereQuery を次のように変更します。

protected string getWhereQuery()
{
    string query = txtQuery.Text;
    if(string.IsNullOrEmpty(query))
     query=" 1=1";
    return query;
}
于 2016-12-19T11:34:36.460 に答える