使用TopSpeed ODBC驱动向Clarion .TPS插入TIME类型数据报错求助
解决TopSpeed ODBC驱动插入TIME类型字段的问题
我之前处理过类似的TopSpeed ODBC驱动对接Clarion .TPS文件的问题,针对你遇到的Invalid operand for operator: <assignment>错误,结合驱动对TIME类型的特殊存储规则,这里有两种可行的解决方式:
1. 使用ODBC标准TIME字面量格式
虽然文档说明TIME类型底层存储的是午夜后百分之一秒数加1,但直接传入整数并不被驱动的SQL语法接受。你需要改用ODBC标准的{t 'HH:MM:SS'}格式来指定时间值:
- 如果你的整数
1对应午夜00:00:00.00(即底层存储值1),可以这样写:INSERT INTO MYTAB (SOMEDATE, SOMETIME) VALUES ({d '2020-08-25'}, {t '00:00:00'}) - 如果需要指定到百分之一秒的精度,可以扩展为
{t 'HH:MM:SS.FF'}格式(FF代表百分之一秒)。比如要对应底层存储值101(即午夜后1秒整:100*0.01秒 +1),可以写:INSERT INTO MYTAB (SOMEDATE, SOMETIME) VALUES ({d '2020-08-25'}, {t '00:00:01.00'})
2. 使用参数化查询(推荐方案)
在C#中使用参数化查询是更稳妥的选择,既能避免手动拼接格式的麻烦,还能防止SQL注入,驱动会自动处理.NET类型和Clarion TIME类型的转换。示例代码如下:
using (OdbcConnection conn = new OdbcConnection("你的TopSpeed ODBC连接字符串")) { conn.Open(); string sql = "INSERT INTO MYTAB (SOMEDATE, SOMETIME) VALUES (?, ?)"; using (OdbcCommand cmd = new OdbcCommand(sql, conn)) { // 传入日期参数 cmd.Parameters.AddWithValue("@SOMEDATE", new DateTime(2020, 8, 25)); // 传入TimeSpan对应午夜后的时间,比如0秒对应底层存储值1 cmd.Parameters.AddWithValue("@SOMETIME", TimeSpan.FromSeconds(0)); cmd.ExecuteNonQuery(); } }
关于TopSpeed ODBC驱动的SQL语法权威指南
目前最权威的参考文档是SoftVelocity官方提供的TopSpeed ODBC Driver User's Guide,这份文档详细说明了驱动支持的SQL语法、数据类型映射规则以及各类特殊处理细节,你可以通过SoftVelocity的官方支持渠道获取这份文档。
内容的提问来源于stack exchange,提问作者Be Kind To New Users
相关产品推荐
相关产品推荐

