我在查询表达式
中遇到语法错误(缺少运算符)string strSql2 = "Select N_Serie,MacID from " + cmdb_ModelStock2.Text + " WHERE Date_Ajout = " + cmdb_Date2.Text;
我一步一步地调试并调试,我看,它得到了日期和时间。 这可能是问题吗?如果可以的话,可以让它只获得日期而不是时间。
答案 0 :(得分:3)
要做的第一件事就是停止构建这样的SQL。如果确实需要动态选择表格,您应该确保使用有效的白名单...但是对于"其中"您应该使用参数化SQL - 将cmdb_Date2.Text
解析为DateTime
,并将其指定为参数值。使用参数化SQL可以保护您免受SQL injection attacks的攻击,避免转换问题,并使您更容易阅读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控件。 (我们不知道您正在使用哪种UI,这使得很难在此处提供建议。)
根据您在数据库中使用的数据类型,您可能希望使用BETWEEN
查询而不是完全匹配。
答案 1 :(得分:0)
你最好使用参数作为日期,如下所示
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;
执行cmd