我想传递三个查询字符串变量,其中包括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;
}
答案 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>'