2009-11-20 179 views
1

當我嘗試通過存儲過程更新記錄時發生錯誤。 我得到的錯誤是2147217833字符串或二進制數據將被截斷。2147217833字符串或二進制數據將被截斷

我已經在插入的每個字段上做了一段長度,他們應該舒適地適合數據庫字段 - 即長度不大於列規格。

此刻完全困惑 - 爲什麼會出現此錯誤的其他原因?

謝謝,

Set objReturnParam = objComm.CreateParameter("Return",adInteger,adParamReturnValue) 
Set objRiskIDParam = objComm.CreateParameter("@riskID",adBigInt,adParamInput) 
Set objControlsDescriptionParam = objComm.CreateParameter("@ControlsDescription",adVarChar,adParamInput,5000) 
Set objTreatmentParam = objComm.CreateParameter("@Treatment",adVarChar,adParamInput,5000) 
Set objControlsParam = objComm.CreateParameter("@Controls",adVarChar,adParamInput,10) 
Set objPriorityParam = objComm.CreateParameter("@Priority",adVarChar,adParamInput,6) 
Set objProbabilityParam = objComm.CreateParameter("@Probability",adVarChar,adParamInput,6) 
Set objImpactParam = objComm.CreateParameter("@Impact",adVarChar,adParamInput,6) 
Set objScoreParam = objComm.CreateParameter("@Score",adInteger,adParamInput) 
Set objReviewTimeframeParam = objComm.CreateParameter("@ReviewTimeframe",adVarChar,adParamInput,6) 
Set objReviewDateParam = objComm.CreateParameter("@ReviewDate",adDate,adParamInput) 
Set objDateReviewedParam = objComm.CreateParameter("@DateReviewed",adDate,adParamInput) 
Set objReviewerIDParam = objComm.CreateParameter("@ReviewerID",adInteger,adParamInput)  


objComm.Parameters("@riskID") = lRiskID 
objComm.Parameters("@ControlsDescription") = strControlsDescription 
objComm.Parameters("@Treatment") = strTreatment 
objComm.Parameters("@Controls") = strControls 
objComm.Parameters("@Priority") = strPriority 
objComm.Parameters("@Probability") = strProbability 
objComm.Parameters("@Impact") = strImpact 
objComm.Parameters("@Score") = iScore 
objComm.Parameters("@ReviewTimeframe") = strReviewTimeframe 
objComm.Parameters("@ReviewDate") = cStr(Year(dReviewDate)) + "-" + cStr(Month(dReviewDate)) + "-" + cStr(Day(dReviewDate)) + " 00:00:00" 
objComm.Parameters("@DateReviewed") = cStr(Year(Date)) + "-" + cStr(Month(Date)) + "-" + cStr(Day(Date)) + " 00:00:00" 
objComm.Parameters("@ReviewerID") = Cstr(Session("UserID")) 

當我輸出的每個我想要更新的變量,每個的長度爲:

lRiskID:2
strControlsDescription:6
strTreatment: 6
strControls:4
strPriority:0
strProbability:1
strImpact:1
iScore:1
strReviewTimeframe:0
Reviewdate19
dateReviewed19
reviewerid2

[ID] [numeric](18, 0) IDENTITY(1,1) NOT NULL, 
[CONTROLS_DESCRIPTION] [varchar](5000) COLLATE Latin1_General_CI_AS NOT NULL, 
[TREATMENT] [varchar](5000) COLLATE Latin1_General_CI_AS NOT NULL, 
[PRIORITY] [varchar](6) COLLATE Latin1_General_CI_AS NOT NULL, 
[PROBABILITY] [varchar](6) COLLATE Latin1_General_CI_AS NOT NULL, 
[IMPACT] [varchar](6) COLLATE Latin1_General_CI_AS NOT NULL, 
[SCORE] [tinyint] NOT NULL, 
[REVIEW_TIMEFRAME] [varchar](6) COLLATE Latin1_General_CI_AS NOT NULL, 
[PROPOSED_REVIEW_DATE] [datetime] NOT NULL, 
[DATE_REVIEWED] [datetime] NULL, 
[REVIEWER_ID] [int] NULL, 
+0

你能分享模式和代碼嗎?你很可能會執行一個cast/convert/substring /等。或者可能獲得隱式轉換到/從unicode,或可能是別的。很難說沒有看到代碼/架構。 – chadhoc 2009-11-20 14:50:17

+0

好的,這有幫助,但是你打算怎麼寫數據到服務器,並且除插入...值外還有其他代碼嗎?即看起來你正在構建一個ADO命令對象並填充它的參數集合 - 你在調用什麼來寫入到服務器(即cmd.Execute('what procedure')),並且你可以共享該過程聲明中包含的任何代碼(即param接口和任何之前的實際插入語句)? – chadhoc 2009-11-20 16:18:34

+0

是否有任何理由鑄造日期字符串之前分配給datetime類型?爲什麼不只是做objComm.Parameters(「@ ReviewDate」)= dReviewDate objComm.Parameters(「 @DateReviewed「)=日期 – kristof 2009-11-20 17:00:31

回答

2

沒有架構和代碼,這是很難。

隨想:

  • 你串聯,或使用CAST/VARCHAR沒有長度?
  • 是否有尾隨空格(例如,LEN忽略尾隨空格)
  • 或者是否存在審覈觸發器?代碼添加

編輯,後哪裏去@Controls?有沒有列...

對我來說,這意味着截斷誤差不是此表

+0

ok模式和代碼添加.... – thegunner 2009-11-20 15:40:22

0

您的參數聲明不匹配所有的表的數據類型。您使用adBigInt作爲數字(使用adNumeric),使用adInteger作爲tinyint(使用adTinyInt)。
它看起來像你在VB6中,而在VB6中,adDate數據類型被用於Access。爲了更新SQL Server數據庫,您需要改用adDBTimeStamp作爲參數數據類型。

http://www.devguru.com/Technologies/ado/quickref/command_createparameter.html

相關問題