错误:在期望条件的上下文中指定的非布尔类型的表达式

时间:2017-08-23 06:01:34

标签: asp.net sql-server crystal-reports

我想传递三个查询字符串变量,其中包括DateFrom,DateTo和UserName。当我调用该变量时,它显示错误:

  

'在预期条件的上下文中指定的非布尔类型的表达式,靠近'admin'。'“。

我该如何解决这个问题?这是我的代码:

protected void Page_Load(object sender, EventArgs e)
{
        strDate = Convert.ToDateTime(Request.QueryString["DateFrom"]);
        endDate = Convert.ToDateTime(Request.QueryString["DateTo"]);
        UserName = Convert.ToSingle(Request.QueryString["UsName"]);
        string UserName = Request.QueryString["UsrName"];
        string sql;
        sql = ("SELECT * FROM tblReport WHERE Date between'" + strDate + "'and'" + endDate + "'and'" + UserName + "'");
        SqlDataAdapter sda = new SqlDataAdapter(sql, con);
        DataTable dt = new DataTable();
        DataSet dst = new DataSet();
        sda.Fill(dst, "tblReport");
        crypt.Load(@"D:\My Project\Asp.Net\ITApplication\ITApplication\CrystalReport.rpt");
        crypt.SetDataSource(dst);
        CrystalReportViewer1.ReportSource = crypt;
 }

2 个答案:

答案 0 :(得分:0)

您的SQL字符串格式不正确。

and运营商附近放置空格,并在()中使用between

sql = ("SELECT * FROM tblReport WHERE [Date] between ('" + strDate + "' and '" + endDate + "') and UserName='" + UserName + "'");

旁注

使用带有这样的连接值的SQL字符串是一个非常坏主意。它会让您暴露于SQL注入,并且总体上是一种不好的做法。请考虑使用Command.Parameters

SqlCommand Command = new SqlCommand("SELECT * FROM tblReport WHERE [Date] between (@strDate and @endDate) and UserName=@UserName");
Command.Parameters.Add(new SqlParameter("strDate", strDate)); 
Command.Parameters.Add(new SqlParameter("endDate", endDate)); 
Command.Parameters.Add(new SqlParameter("UserName", UserName)); 

答案 1 :(得分:0)

你遗漏了where子句中的某些内容......应该是这样的:

WHERE Date BETWEEN '<FromDate>' AND '<ToDate>' 
AND UserName = '<UserName>'