如何从C#应用程序获取在我的SQL数据库上运行的SELECT日期查询?

时间:2017-06-08 16:02:33

标签: c# sql sql-server

pwd

我不确定任何人都可以在没有看到数据库的情况下提供帮助,但我想我会试一试。所以我查询了我的数据库,尝试在某个日期范围内获取记录。没有错误抛出,只是没有结果,尽管背后有关联的数据应该被拉入。我已经在SQL编辑器中使用日期而不是参数变量测试了数据库上的SQL查询,并获得了正确的结果。我认为可能需要CAST以便能够将字符串中的日期检查到数据库中的日期时间?但是当我试着把它放进去的时候 SqlDataSource1.SelectCommand =" SELECT * FROM tbl_dateCorrection WHERE @DateFiled BETWEEN CAST(@ DateField1 AS DATE)和CAST(@ DateField2 AS DATE)&#34 ;; 我收到错误消息,说明从字符串转换日期和/或时间时转换失败。任何想法都赞赏。

3 个答案:

答案 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();