You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

报错:无法将参数值从String转换为DateTime,求排查解决

错误排查:Failed to convert parameter value from a String to a DateTime

错误信息:Failed to convert parameter value from a String to a DateTime.
错误触发位置:ExecuteDataset(Connection, cmd, query, parameters);

错误原因

  • 你为@FROMDATE和@TODATE参数指定了SqlDbType.DateTime类型,但赋值时传入的是字符串格式的日期(通过ToString("yyyyMMdd")转换后的结果),SQL Server无法自动将该字符串转换为DateTime类型,导致类型不匹配报错。
  • 额外逻辑问题:代码开头paramCount = 2 + results.Count的计算逻辑错误——初始results为空集合,所以paramCount会被算成2,但后续会向results中添加2个日期参数+循环生成的参数,实际参数数量会远大于paramCount,不过这不是当前报错的直接原因。

解决方案

1. 修复日期参数赋值问题

直接传入DateTime类型值,不要转换为字符串:

sqlParam[0] = new SqlParameter("@FROMDATE", SqlDbType.DateTime);
// 直接使用转换后的DateTime对象,无需ToString
sqlParam[0].Value = Convert.ToDateTime(SearchRequest.FromDate);
results.Add(sqlParam[0]);

sqlParam[1] = new SqlParameter("@TODATE", SqlDbType.DateTime);
sqlParam[1].Value = Convert.ToDateTime(SearchRequest.ToDate);
results.Add(sqlParam[1]);

如果SearchRequest.FromDate本身就是DateTime类型,可进一步简化:

sqlParam[0].Value = SearchRequest.FromDate;

2. 修正参数计数逻辑

参数总数应为2个日期参数加上strCode的元素数量,修改开头的计数代码:

int paramCount = 2 + strCode.Count;

3. 可选:优化参数管理逻辑

直接用List<SqlParameter>管理参数,避免数组初始化的冗余操作:

List<SqlParameter> results = new List<SqlParameter>();

// 添加日期参数
results.Add(new SqlParameter("@FROMDATE", SqlDbType.DateTime) {
    Value = Convert.ToDateTime(SearchRequest.FromDate)
});
results.Add(new SqlParameter("@TODATE", SqlDbType.DateTime) {
    Value = Convert.ToDateTime(SearchRequest.ToDate)
});

foreach (var o in strCode)
{
    string paramName = $"@Param{results.Count}";
    SqlParameter paramRef = new SqlParameter(paramName, o);
    results.Add(paramRef);
    lstParam.Add(paramName);
}

// 直接转换为数组
SqlParameter[] sqlParams = results.ToArray();

内容的提问来源于stack exchange,提问作者user2240189

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:20:17