2013-09-25 63 views
1

我看遍了各地,我找不到答案。無法插入字符串值到DATETIME msSQL數據類型

這裏是我用ColdFusion和MSSQL得到錯誤

Error Executing Database Query. 

[Macromedia][SQLServer JDBC Driver][SQLServer]Conversion failed when converting date and/or time from character string. 

The error occurred in SQL 

INSERT INTO Requests ( 
    RequestName, 
    RequestEmail, 
    RequestPhone, 
    RequestType, 
    RequestSiteSection, 
    RequestDue, 
    RequestUrgent, 
    RequestTitle, 
    RequestURL, 
    RequestMessage, 
    Attachment1, 
    Attachment2, 
    Attachment3, 
    Attachment4, 
    Attachment5, 
    RequestCreated, 
    RequestModified, 
    RequestPriority, 
    RequestAssignedTo, 
    RequestStatus 
) 
VALUES ( 
    '', 
    'Joshua >Davis', 
    '[email protected]', 
    '8046789', 
    'Correction', 
    'Natural Heritage', 
    '09/11/2013', 
    'This is the Title of the REQUEST!', 
    'http://www.dcr.virginia.com', 
    'rewas', 
    '/opt/coldfusion8/runtime/servers/coldfusion/SERVER-INF/temp/wwwroot-tmp/neotmp47128.tmp', 
    '', 
    '', 
    '', 
    '', 
    (param 1), 
    (param 2), 
    '0', 
    'Webmaster', 
    'Pending' 
) 

每個參數是cfqueryparam cfsqltype='CF_SQL_timestamp' value='#CreateODBCDateTime(now())#'

這個錯誤出現,當我嘗試使用插入任何下列

  • cfqueryparam cfsqltype ='CF_SQL_timestamp'value ='#CreateODBCDateTime(now())#'
  • 現在()
  • CreateODBCDateTime(NOW())
  • SQL GETDATE()
  • 的其他變化

我試圖串聯的時間和日期的,演員和工作轉換爲datetime,在格式化的日期和時間,但沒有運氣我卡住了。

我感謝您的幫助。

這裏是查詢

INSERT INTO Requests (
    RequestName, 
    RequestEmail, 
    RequestPhone, 
    RequestType, 
    RequestSiteSection, 
    RequestDue, 
    RequestUrgent, 
    RequestTitle, 
    RequestURL, 
    RequestMessage, 
    Attachment1, 
    Attachment2, 
    Attachment3, 
    Attachment4, 
    Attachment5, 
    RequestCreated, 
    RequestModified, 
    RequestPriority, 
    RequestAssignedTo, 
    RequestStatus 
) 
VALUES(
    '<cfif IsDefined('form.requestUrgent')>#form.requestUrgent#</cfif>', 
    '#form.requestName#', 
    '#form.requestEmail#', 
    '#form.requestPhone#', 
    '#form.requestType#', 
    '#form.requestSection#', 
    '#form.requestDueDate#', 
    '#form.requestTitle#', 
    '#form.requestURL#', 
    '#form.requestMessage#', 
    '#form.attachment1#', 
    '#form.attachment2#', 
    '#form.attachment3#', 
    '#form.attachment4#', 
    '#form.attachment5#', 
    getdate(), 
    getdate(), 
    '0', 
    'Webmaster', 
    'Pending' 
) 

您可以分出來的getDate()與上述任何選項#var#轉換投帕拉姆等

+0

請求表中元素的格式是什麼? – BWS

+0

您可能會發現,更容易排查cfqueryparam標記中的所有變量,以確保您的字段值不包含也打破腳本的字符(以及防止sql注入)....您的代碼可能與你的sql代碼中提到的更早的日期有關。另外,就足夠了一個mssql日期字段。 cf_sql_timestamp獲取日期/時間字段。 – steve

+2

您的變量似乎在您的示例代碼中關閉。你的插入從'RequestName'列開始,但你的VALUES子句中的第一個變量是'form.requestUrgent',然後是'form.requestName'等。你應該爲所有變量值使用''標籤。 –

回答

5

從評論

列和您的插入查詢中的值似乎在您的示例代碼中關閉。您的插入從列RequestName開始,但VALUES子句中的第一個變量是form.requestUrgent,然後是form.requestName等。因此,您的查詢嘗試在日期列RequestDue中插入form.requestSection(在您的示例中爲「自然遺產」)。從你的例子

摘錄:

INSERT INTO Requests ( 
    RequestName,    /* column 1 */ 
    RequestEmail,    /* column 2 */ 
    RequestPhone,    /* column 3 */ 
    RequestType,    /* column 4 */ 
    RequestSiteSection,   /* column 5 */ 
    RequestDue,     /* column 6 */ 
    RequestUrgent,    /* column 7 */ 
    RequestTitle,    /* column 8 */ 
.... 


VALUES (
    '<cfif IsDefined('form.requestUrgent')>#form.requestUrgent#</cfif>', /* value 1 */ 
    '#form.requestName#',  /* value 2 */ 
    '#form.requestEmail#',  /* value 3 */ 
    '#form.requestPhone#',  /* value 4 */ 
    '#form.requestType#',  /* value 5 */ 
    '#form.requestSection#',  /* value 6 */ 
    '#form.requestDueDate#',  /* value 7 */ 
    '#form.requestTitle#',  /* value 8 */ 
.... 

我不能強調不夠你應該使用<cfqueryparam>代碼用於所有的變量值的。它有助於protect against SQL injectionimproves query performance

+0

就是這樣!我知道這會很簡單。我會改變你所建議的所有參數 – Onebigcelt

+0

@Onebigcelt - 非常好,很高興我可以幫助(並相信我,我們都做過這樣的事情)。如果這對你有用,不要忘記接受它作爲答案,以便其他人可以更容易地找到答案。謝謝。 –

相關問題