c# – 在参数化SQL字符串中使用.Net DateTime的正确方法
发布时间:2020-12-15 18:06:17 所属栏目:百科 来源:网络整理
导读:关于在Sql语句中使用.Net DateTime有几个问题,但没有一个能解决我的问题. 我正在使用以下代码查询Oracle数据库: private DataTable QueryByIdAndDate(string id,DateTime fdate,DateTime tdate) { string query = "SELECT * FROM table WHERE ID = :id AND
关于在Sql语句中使用.Net DateTime有几个问题,但没有一个能解决我的问题.
我正在使用以下代码查询Oracle数据库: private DataTable QueryByIdAndDate(string id,DateTime fdate,DateTime tdate) { string query = "SELECT * FROM table WHERE ID = :id AND DATE_TIME BETWEEN :from AND :to" DbCommand cmd = db.CreateCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = query; DbParameter fromDate = CreateDateParameter(cmd,fdate); fromDate.ParameterName = "from"; DbParameter toDate = CreateDateParameter(cmd,tdate); toDate.ParameterName = "to"; DbParameter idParam = CreateStringParameter(cmd,id); idParam.ParameterName = "id"; cmd.Parameters.AddRange(new DbParameter[] { fromDate,toDate,idParam }); return db.ExecuteQuery(cmd); } private DbParameter CreateDateParameter(DbCommand cmd,DateTime date) { DbParameter param = cmd.CreateParameter(); param.DbType = DbType.DateTime; param.Direction = ParameterDirection.Input; param.Value = date; return param; } 但它不能正常工作.当像这样尝试代码时: DataTable result = QueryByIdAndDate("12345",DateTime.Now,DateTime.Now.AddDays(1)); 它给出以下错误: 我假设它与DateTime格式化的方式有关,但我不知道以可靠的方式解决这个问题的正确方法. 解决方法
(根据评论……)
看起来在这种情况下,参数的顺序很重要……尽管你给它们起了名字.我不会想到这一点,这是一个有点破碎的驱动程序的标志,但是将代码更改为: cmd.Parameters.AddRange(new DbParameter[] { idParam,fromDate,toDate }); 应该解决它. (顺便说一下,这不一定是构建参数的方式,但这在某种程度上并不重要.) 不要开始将日期/时间值指定为字符串.引入比您需要的更多字符串转换是一个非常糟糕的主意. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |