pwd
我不确定任何人都可以在没有看到数据库的情况下提供帮助,但我想我会试一试。所以我查询了我的数据库,尝试在某个日期范围内获取记录。没有错误抛出,只是没有结果,尽管背后有关联的数据应该被拉入。我已经在SQL编辑器中使用日期而不是参数变量测试了数据库上的SQL查询,并获得了正确的结果。我认为可能需要CAST以便能够将字符串中的日期检查到数据库中的日期时间?但是当我试着把它放进去的时候 SqlDataSource1.SelectCommand =" SELECT * FROM tbl_dateCorrection WHERE @DateFiled BETWEEN CAST(@ DateField1 AS DATE)和CAST(@ DateField2 AS DATE)&#34 ;; 我收到错误消息,说明从字符串转换日期和/或时间时转换失败。任何想法都赞赏。
答案 0 :(得分:0)
你传递一个字符串"列名"到存储过程。在存储过程中,生成的SQL看起来像这样:
SELECT * FROM tbl_dateCorrection WHERE' DateFiled' BETWEEN' 6/1 2017' AND' 6/8/2017'
...这不会产生你想要的效果......
你需要尝试这样的事情:
if (dateType == "DateFiled")
{
SqlDataSource1.SelectParameters.Add(new Parameter("DateField1", TypeCode.String, DateField1));
SqlDataSource1.SelectParameters.Add(new Parameter("DateField2", TypeCode.String, DateField2));
SqlDataSource1.SelectCommand = "SELECT * FROM tbl_dateCorrection WHERE DateFiled BETWEEN @DateField1 AND @DateField2";
SqlDataSource1.DataBind();
GridView1.DataBind();
}
else {
//some other Date
SqlDataSource1.SelectParameters.Add(new Parameter("DateField1", TypeCode.String, DateField1));
SqlDataSource1.SelectParameters.Add(new Parameter("DateField2", TypeCode.String, DateField2));
SqlDataSource1.SelectCommand = "SELECT * FROM tbl_dateCorrection WHERE SomeOtherDate BETWEEN @DateField1 AND @DateField2";
SqlDataSource1.DataBind();
GridView1.DataBind();
}
答案 1 :(得分:0)
string dateType = DateFieldDropDown.SelectedItem.ToString();
string DateField1 = DateTextBox.Text;
string DateField2 = dateSelection2Text.Text;
if (dateType == "DateFiled")
{
SqlDataSource1.SelectParameters.Add(new Parameter("DateField1", TypeCode.String, DateField1));
SqlDataSource1.SelectParameters.Add(new Parameter("DateField2", TypeCode.String, DateField2));
SqlDataSource1.SelectCommand = "SELECT * FROM tbl_dateCorrection WHERE DateFiled BETWEEN CAST(@DateField1 AS DATE) AND CAST(@DateField2 AS DATE)";
SqlDataSource1.DataBind();
GridView1.DataBind();
我需要使用CAST来使SQL数据库中的日期查找正常工作,但正如Gareth所说,它显示了转换错误。通过不将格式更改为yyyy-MM-dd并使用CAST,它可以正常工作。我还需要删除DateFiled作为参数,因为它应该在WHERE子句之后作为列名在SQL语句中。
答案 2 :(得分:0)
由于您将变量DateFiled硬编码为' DateFiled',因此您不需要将其作为参数传递。
只是做:
SqlDataSource1.SelectCommand = "SELECT * FROM tbl_dateCorrection WHERE DateFiled BETWEEN @DateField1 AND @DateField2";
SqlDataSource1.DataBind();
GridView1.DataBind();