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

SQL Server隐式转换错误:datetime转timestamp不允许,参数传递排查

解决隐式转换datetime到timestamp的错误

咱们先把这个错误的根源搞清楚——你看到的timestamp可不是你以为的日期时间类型!在SQL Server里,timestamp(现在官方推荐用rowversion作为别名)是一种二进制数据类型,专门用来跟踪表行的修改版本,和日期时间半毛钱关系都没有。这个错误说明你的代码里存在把datetime类型的值试图隐式转成timestamp的操作,而SQL Server不允许这种转换。

看你贴的代码,C#端传递DateTime、存储过程参数定义为datetime本身是没问题的,问题大概率出在存储过程的内部逻辑里:

  • 你可能在存储过程中把@BirthDate这个datetime参数直接赋值给了一个timestamp/rowversion类型的表列——但要注意,timestamp列是SQL Server自动维护的,根本不需要手动赋值!
  • 也有可能是你的参数名@BirthDate和表中的某个timestamp类型列重名了,导致SQL Server混淆了类型。

给你几个具体的解决步骤:

  1. 打开你的存储过程,检查所有用到@BirthDate的语句,确认是否有把它赋值给timestamp类型列的操作,如果有,直接删掉那行赋值代码。
  2. 如果是参数名和表列名冲突,修改参数名(比如改成@InputBirthDate)或者调整表列名,避免类型混淆。
  3. 另外,建议在C#中添加参数时明确指定SqlDbType,比AddWithValue更安全,能避免潜在的类型转换问题:
sqlCommand.Parameters.Add("@BirthDate", SqlDbType.DateTime).Value = dateTime;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:13:31