我可以在不带引号的 SQL 语句中添加字符串类型参数吗?

Can I add a string type parameter to a SQL statement without quotes?

我有一个 C++Builder SQL 语句,其参数类似于

UnicodeString SQLStatement = "INSERT INTO TABLENAME (DATETIME) VALUES (:dateTime)"

我可以添加不带引号的参数吗?

通常我会使用

TADOQuery *query = new TADOQuery(NULL);
query->Parameters->CreateParameter("dateTime", ftString, pdInput, 255, DateTimeToStr(Now()));

最终会产生 SQL 字符串

INSERT INTO TABLENAME (DATETIME) VALUES ('2022-01-14 14:33:00.000')

但是因为这是一个遗留项目(当然,它一直是)而且我必须维护不同的数据库技术,我需要能够注入数据库特定的日期时间转换方法,这样最终结果看起来像

INSERT INTO TABLENAME (DATETIME) VALUES (to_date('2022-01-14 14:33:00.000', 'dd.mm.yyyy hh24:mi:ss')))

如果我尝试通过我的 'usual' 方法注入它(因为我不认为我可以将第二个参数注入到这个方法中)它看起来像:

TADOQuery *query = new TADOQuery(NULL);
query->Parameters->CreateParameter("dateTime", ftInteger, pdInput, 255, "to_date('" + DateTimeToStr(Now()) + "', 'dd.mm.yyyy hh24:mi:ss')");

当然结果会是这样的:

INSERT INTO TABLENAME (DATETIME) VALUES ('to_date('2022-01-14 14:33:00.000', 'dd.mm.yyyy hh24:mi:ss')'))

因此无效

或者是否有另一种方法可以更干净优雅地做到这一点?尽管我会接受 'working'.

我可以通过准备两个 SQL 语句来解决这个问题,并在另一种数据库技术出现时切换语句,但我只是想检查是否有其他方法。

当您的输入值显然不是整数时,为什么要将参数的 DataType 定义为 ftInteger?您应该将 DataType 定义为 ftDateTime,然后将 Now() 按原样 分配给参数的 Value。让数据库引擎根据自己的规则决定如何格式化最终 SQL 中的 date/time 值。

query->Parameters->CreateParameter("dateTime", ftDateTime, pdInput, 0, Now());