使用日期条件获取数据值
本文关键字:数据 获取 条件 日期 | 更新日期: 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;
执行命令