从Coldfusion在MSSQL中插入日期时间

use*_*820 5 sql coldfusion

我试图插入NOWMySQL表.就像是:

<cfset datatime = CREATEODBCDATETIME( Now() ) />

<cfquery name="qInsert" datasource="#dbanme#" >
   INSERT INTO TableName(....,date_created, date_modified)
   VALUES(...,'#datatime#', '#datatime#')
</cfquery>
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

无效的JDBC时间戳转义

有帮助吗?

Joe*_*e C 12

让ColdFusion为您写出数据 - 使用cfqueryparam.这里并不是绝对必要的,但最好尽可能使用它.除了保护您免受SQL注入之外,它还会适当地格式化您的变量,因此您不必担心是否需要将值插入字符串或整数或其他任何内容.

<cfset datatime = CREATEODBCDATETIME( Now() ) />

<cfquery name="qInsert" datasource="#dbanme#" >
   INSERT INTO TableName(....,date_created, date_modified)
   VALUES(...,
        <cfqueryparam value="#datatime#" cfsqltype="cf_sql_timestamp">,
        <cfqueryparam value="#datatime#" cfsqltype="cf_sql_timestamp">
    )
</cfquery>
Run Code Online (Sandbox Code Playgroud)


ste*_*eve 7

如果您想要没有时间的日期,请使用以下内容:

<cfquery name="qInsert" datasource="#dbanme#" >
   INSERT INTO TableName( ...., date_created, date_modified )
   VALUES ( ...
        , <cfqueryparam cfsqltype="cf_sql_date" value="#now()#">
        , <cfqueryparam cfsqltype="cf_sql_date" value="#now()#">
   )
</cfquery>
Run Code Online (Sandbox Code Playgroud)

cf_sql_date将删除任何时间,并根据您的字段类型显示仅日期或日期00:00:00作为时间值.

如果你想要一个有时间的日期:

<cfquery name="qInsert" datasource="#dbanme#" >
   INSERT INTO TableName ( ....,date_created, date_modified )
   VALUES ( ...
      , <cfqueryparam cfsqltype="cf_sql_timestamp" value="#now()#">
      , <cfqueryparam cfsqltype="cf_sql_timestamp" value="#now()#">
   )
</cfquery>
Run Code Online (Sandbox Code Playgroud)


Kyl*_*ale 0

插入 SQL Server 时,不需要在生成的 ColdFusion 时间戳周围加引号。

详细地说,如果您使用 DateFormat 等将时间戳构建为字符串,则必须使用以下格式插入:

INSERT INTO TABLE(DATE_COL) VALUES({ts '#dateInAStringFormat#'})
Run Code Online (Sandbox Code Playgroud)

ColdFusion ODBCx 日期函数可以为您完成所有这些工作,所以它只是:

INSERT INTO TABLE(DATE_COL) VALUES( #dateInAStringFormat# )
Run Code Online (Sandbox Code Playgroud)