使用日期条件获取数据值

本文关键字:数据 获取 条件 日期 | 更新日期: 2023-09-27 17:57:46

查询表达式中出现语法错误(缺少运算符)

string strSql2 = "Select N_Serie,MacID from " + cmdb_ModelStock2.Text + " WHERE Date_Ajout = " + cmdb_Date2.Text;

我放了一个断点,一步一步地调试,我看到了,它得到了日期和时间。这会是问题所在吗??如果是这样的话,就有可能只得到日期而不是时间。

使用日期条件获取数据值

首先要做的是停止像那样构建SQL。如果确实需要动态选择表,则应确保使用有效表的白名单。。。但是对于"where"子句,应该使用参数化SQL-将cmdb_Date2.Text解析为DateTime,并将其指定为参数值。使用参数化SQL可以保护您免受SQL注入攻击,避免转换问题,并使读取SQL更容易。

因此:

string tableName = ValidateTableName(cmdb_ModelStock2.Text); // TODO: Write this!
DateTime date = DateTime.Parse(cmdb_Date2.Text); // See below
string sql = "Select N_Serie,MacID from " + tableName + " WHERE Date_Ajout = ?";
using (var command = new OleDbCommand(sql, conn))
{
    // Or use type "Date", perhaps... but that would be more appropriate
    // with a range. The name doesn't matter using OLE, which uses positional
    // parameters.
    command.Parameters.Add("Date", OleDbType.DBDate).Value = date;
    // Execute the command etc
}

请注意,这里我使用的是DateTime.Parse,但理想情况下,您应该使用一个直接给出DateTime的UI控件。(我们不知道你使用的是什么类型的用户界面,这使得在这里很难给出建议。)

根据您在数据库中使用的数据类型,您可能希望使用BETWEEN查询,而不是完全匹配。

您最好使用以下中的日期参数

string strSql2 = "Select N_Serie,MacID from " + cmdb_ModelStock2.Text + " WHERE Date_Ajout = ?";

cmdb_Date2创建日期时间,例如,如果日期时间格式为"yyyy-MM-dd HH:MM",则

DateTime dt = 
    DateTime.ParseExact(cmdb_Date2.Text, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);

现在你可以设置如下的参数值

cmd.Parameters.Add("Date_Ajout ", OleDbType.Date).Value = dt;

执行命令