我可以在不带引号的 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());
我有一个 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());