当数据是阿拉伯语时,使用带参数的动态查询,选择查询不起作用

时间:2015-03-02 09:28:14

标签: c# mysql asp.net

Visual Studio 中的 asp.net c#代码中,我开发了一个搜索按钮。当我尝试运行代码时,它在编写代码时没有返回任何内容。我认为问题是stat_leger是用阿拉伯语写的。

SqlParameter[] para = new SqlParameter[4];
    para[0] = new SqlParameter("@stat_leger", ddlACCcode.SelectedValue);
    para[1] = new SqlParameter("@branch", DDLBranch.SelectedValue);
    para[2] = new SqlParameter("@from", db.getDate(txtFrom.Text));
    para[3] = new SqlParameter("@to", db.getDate(txtTo.Text));

 DataTable dtreport = db.SelectCmdText("Select * from PostedVoucher join transactions on trans_code = stat_trans_code where stat_leger = @stat_leger and branch=@branch and stat_date between @from and @to ORDER BY stat_date ", para);

GridView1.DataSource = dtreport;
GridView1.DataBind();
float GTotal = 0;
float GTotalcrd = 0;
float GTotaldeb = 0;

当我尝试在sql server中编写相同的select时,它有效。但是对于阿拉伯语,我使用了N并返回了记录。

   Select * from PostedVoucher join transactions on trans_code =     
    stat_trans_code 
      where stat_sub_leger = N'الصندوق' and branch= N'الفرع الرئيسي' and stat_date between '2013-12-05 00:00:00.000' AND '2013-12-05 00:00:00.000' ORDER BY stat_date ;

我尝试在select中编写它但仍无法正常工作:

          DataTable dtreport = db.SelectCmdText("Select * from PostedVoucher join transactions on trans_code = stat_trans_code where stat_sub_leger = N'@stat_sub_leger' and branch=@branch and stat_date between @from and @to ORDER BY stat_date ", para);

2 个答案:

答案 0 :(得分:0)

尝试更改您的查询,样本:

Select * from PostedVoucher join transactions on trans_code = stat_trans_code where stat_leger like '%' + @stat_leger + '%' OR  branch like '%' + @branch + '%' AND stat_date between @from and @to ORDER BY stat_date ", para);

答案 1 :(得分:0)

我认为它可能会这样:

para[0] = new SqlParameter("@stat_leger", "N'"+ddlACCcode.SelectedValue+"'")

然后在asp.net中使用您的查询:

DataTable dtreport = db.SelectCmdText(
    "Select * from PostedVoucher join transactions on trans_code = stat_trans_code where stat_sub_leger = N'@stat_sub_leger' and branch=@branch and stat_date between @from and @to ORDER BY stat_date ",
    para);

然后总是建议打印最后的SQL命令以查看它是否与正确的SQL命令形式匹配