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

VB.NET向SQLite插入24小时制DateTime类型数据报错如何解决?

问题原因

  1. 参数类型与赋值不匹配:你为@ROSY_FROM、@ROSY_TO两个参数指定了DbType.DateTime类型,但使用Format函数返回的是字符串类型值,类型不一致触发报错。
  2. 方法使用错误:AddWithValue的第二个参数本应为参数值,你此处用来指定DbType属于混用API,会导致参数类型推断异常。
  3. 格式化字符串不符合需求:HH:mm tt中的tt会输出上午/下午标识,和你需要的24小时制格式冲突。

解决方案

根据你表结构的字段类型选择对应方案:

方案1:字段为TEXT类型,存储24小时制时分字符串

直接将参数类型改为DbType.String,格式化时去掉tt即可,修正代码如下:

Dim com As New SQLiteCommand("INSERT INTO ROSY_TB(ROSY_CODE,ROSY_DESCREPTION,ROSY_FROM,ROSY_TO,ROSY_ALLOWFR,ROSY_ALLOWTO,ROSY_APSENTA,ROSY_APSENTB,ROSY_WORKHOUR,ROSY_APSENTNUM,ROSY_CHECK) VALUES (@ROSY_CODE,@ROSY_DESCREPTION,@ROSY_FROM,@ROSY_TO,@ROSY_ALLOWFR,@ROSY_ALLOWTO,@ROSY_APSENTA,@ROSY_APSENTB,@ROSY_WORKHOUR,@ROSY_APSENTNUM,@ROSY_CHECK)", con)
com.Parameters.Add("@ROSY_CODE", DbType.String).Value = ROSYUPDATE_F.LAB_CODEVAL.Text
com.Parameters.Add("@ROSY_DESCREPTION", DbType.String).Value = ROSYUPDATE_F.TEXT_DESCREPTION.Text
' 调整时间参数类型为String,格式化用HH:mm输出24小时制时分
com.Parameters.Add("@ROSY_FROM", DbType.String).Value = Format(ROSYUPDATE_F.DATE_FROM.Value, "HH:mm")
com.Parameters.Add("@ROSY_TO", DbType.String).Value = Format(ROSYUPDATE_F.DATE_TO.Value, "HH:mm")
com.Parameters.Add("@ROSY_ALLOWFR", DbType.Int64).Value = CInt(Val(ROSYUPDATE_F.TEXT_ALLOWFR.Text))
com.Parameters.Add("@ROSY_ALLOWTO", DbType.Int64).Value = CInt(Val(ROSYUPDATE_F.TEXT_ALLOWTO.Text))
com.Parameters.Add("@ROSY_APSENTA", DbType.String).Value = ROSYUPDATE_F.COM_APSENTA.SelectedItem
com.Parameters.Add("@ROSY_APSENTB", DbType.String).Value = ROSYUPDATE_F.COM_APSENTB.SelectedItem
com.Parameters.Add("@ROSY_WORKHOUR", DbType.Int64).Value = CInt(Val(ROSYUPDATE_F.TEXT_WORKHOUR.Text))
com.Parameters.Add("@ROSY_APSENTNUM", DbType.Int64).Value = CInt(Val(ROSYUPDATE_F.COUNTSPENT))
com.Parameters.Add("@ROSY_CHECK", DbType.Boolean).Value = True
con.Open()
com.ExecuteNonQuery()
con.Close()

方案2:字段为时间类型,存储完整DateTime值

不需要手动格式化,直接传入DateTime对象即可,读取时再提取时分部分:

' 直接传入DateTime对象,由SQLite驱动自动处理类型转换
com.Parameters.Add("@ROSY_FROM", DbType.DateTime).Value = ROSYUPDATE_F.DATE_FROM.Value
com.Parameters.Add("@ROSY_TO", DbType.DateTime).Value = ROSYUPDATE_F.DATE_TO.Value

注意事项

  • SQLite本身没有原生的DateTime类型,存储时间时本质是存TEXT/REAL/INTEGER类型的值,选择存储格式时要保证读写逻辑一致。
  • 指定参数类型时统一使用Parameters.Add方法,AddWithValue仅用于不需要显式指定类型、自动推断参数类型的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 04:09:04