【问题标题】:How do you Allow the user to search for a date in a database, showing them all relevant information c#你如何允许用户在数据库中搜索日期,向他们显示所有相关信息 c#
【发布时间】:2026-01-01 22:05:02
【问题描述】:

我想让用户搜索特定日期(使用文本框)并让数据库向他们显示该日期内所有输入的信息。我已经编译了查询,如下所示:

   SELECT Date, ([Test result]),               
   FROM [User/Test]
   WHERE Date Like '%' + @value + '%'

我在手机上使用了一个数据网格视图,让用户可以直观地看到搜索,并结合了一个文本框和搜索按钮,我在这个按钮后面使用了下面的代码:

    this.user_TestTableAdapter.search(this.questionareDataSet1._User_Test,    textBox1.Text);

我得到的错误是无法将 varchar 与日期进行比较,我理解。是否需要将日期转换为字符串才能进行搜索?

谢谢。

【问题讨论】:

  • 我不会将日期转换为字符串,而是将您的搜索字符串转换为日期。这样您就可以避免格式化日期的所有不同问题。
  • 谢谢,关于如何做到这一点的任何建议?我对 c# 很陌生
  • 取决于您编译查询的方式以及您使用的数据库类型。但例如,在 MSSQL 服务器中,您的 WHERE 子句可能如下所示:WHERE Date = CONVERT(DATE, @value)

标签: c# database search


【解决方案1】:

在输入字段中强制格式化为日期“安全”格式(查看网站的 jQuery datepicker 方法)。

var selectedDate = Convert.ToDateTime(txtInputDate.Value);
var sql = " SELECT * FROM table WHERE datefield BETWEEN '" + selectedDate.ToString("yyyy-MM-dd") + "' AND NOW();";

你也可以做...

var dateAddDaysValue = 2;
var sql = " SELECT * FROM table WHERE datefield BETWEEN '" + selectedDate.ToString("yyyy-MM-dd") + "' AND '" + selectedDate.AddDays(dateAddDaysValue).ToString("yyyy-MM-dd") + "';";

欢呼!

编辑:您应该知道,这种构建 SQL 查询的方法极易受到注入的攻击。确保您正确地处理您的查询。

【讨论】:

  • 查询是使用 VS 中的向导编译的,用户搜索背后的代码位于表单中的按钮后面,如果查询是通过向导编译的,我将如何实施您建议的改进?