我繼承了一些需要更新的ASP.NET代碼,這導致我需要從字符串中更改ASP SqlDataSource
的UpdateCommandType
(硬編碼SQL Update
語句)到包含Update
語句的存儲過程。SqlDataSource UpdateParameters - 輸入字符串格式不正確
該字符串執行正常,並使用綁定到控件的參數在細節視圖中(我知道這不是最佳實踐,它使我不得不從客戶端使用數據連接......但我沒有有時間重新編寫這個頁面和許多頁面的所有數據連接)。
反正我只是改變了UpdateCommand
存儲過程,做同樣的事情,我剛剛得到的錯誤
輸入字符串的不正確的格式。
當我嘗試在頁面上更新。
我可以提供代碼,如果要求,但它是大&可怕,所以我暫時詢問是否有人有任何初步的想法?儘管如此,我會放一些小的比特。我一直在尋找UpdateParameterCollection
,因爲我懷疑參數集合是否被緩存在任何地方 - 但看不到任何東西。
我有一個綁定到DataSource
項目,像這樣的控制:
<EditItemTemplate>
<asp:CheckBox ID="chkNonReview" runat="server" Checked='<%# Bind("NonReview") %>' />
</EditItemTemplate>
而且SqlDataSource
已經從這種改變......
<asp:SqlDataSource ID="dsEventDV" runat="server"
ConnectionString="<%$ ConnectionStrings:MyConnString %>"
DeleteCommand="DELETE FROM [I_TRAINEE_EVENTS] WHERE [EVENTID] = @EVENTID"
InsertCommand="INSERT_TRAINEE_EVENTS_ED3"
InsertCommandType="StoredProcedure"
OnInserted="DSEvent_Inserted"
SelectCommand="Get_Candidate_Events_I3"
SelectCommandType="StoredProcedure"
UpdateCommand="UPDATE I_TRAINEE_EVENTS (etc...)"
.....
這樣:
<asp:SqlDataSource ID="dsEventDV" runat="server"
ConnectionString="<%$ ConnectionStrings:MyConnString %>"
DeleteCommand="DELETE FROM [I_TRAINEE_EVENTS] WHERE [EVENTID] = @EVENTID"
InsertCommand="INSERT_TRAINEE_EVENTS_ED3"
InsertCommandType="StoredProcedure"
OnInserted="DSEvent_Inserted"
SelectCommand="Get_Candidate_Events_I3"
SelectCommandType="StoredProcedure"
UpdateCommand="UPDATE_TRAINEE_EVENTS"
UpdateCommandType="StoredProcedure">
.....
用新的UpdateCommand
值。
更新參數:
<UpdateParameters>
<asp:Parameter Name="EVENTID" Type="Int32"/>
<asp:Parameter Name="EVENTTYPEID" Type="Int32"/>
<asp:Parameter Name="EVENTDATE" Type="DateTime"/>
<asp:Parameter Name="STAFFID" Type="Int32"/>
<asp:Parameter Name="REVIEWNO" Type="Int32"/>
<asp:Parameter Name="COMMENTS" Type="String"/>
<asp:Parameter Name="DESTINYVERIFIED" Type="Int32"/>
<asp:Parameter Name="DESTINYVERIFIEDBY" Type="Int32"/>
<asp:Parameter Name="DESTINYVERIFIEDDATE" Type="DateTime"/>
<asp:Parameter Name="REASONFORSUSPENSIONID" Type="Int32"/>
<asp:Parameter Name="RETURNTOWORKDATE" Type="DateTime"/>
<asp:Parameter Name="ContactDetailsUpdated" Type="Int32"/>
<asp:Parameter Name="RETENTION_STATUS_ID" Type="Int32"/>
<asp:Parameter Name="RETENTION_REASON_ID" Type="Int32"/>
<asp:Parameter Name="NonReview" Type="Int32"/>
<asp:Parameter Name="FalsifiedEventReason" Type="Int32"/>
<asp:Parameter Name="SusReqReasonID" Type="Int32"/>
<asp:Parameter Name="SusReqReturnDate" Type="DateTime"/>
</UpdateParameters>
存儲過程聲明如下:
CREATE PROCEDURE [dbo].[UPDATE_TRAINEE_EVENTS]
@EVENTID int,
@EVENTTYPEID int,
@EVENTDATE datetime,
@STAFFID int,
@REVIEWNO int,
@COMMENTS varchar(2100),
@DESTINYVERIFIED int,
@DESTINYVERIFIEDBY int,
@DESTINYVERIFIEDDATE datetime,
@REASONFORSUSPENSIONID int,
@RETURNTOWORKDATE datetime,
@ContactDetailsUpdated int,
@RETENTION_STATUS_ID int,
@RETENTION_REASON_ID int,
@NonReview int,
@FalsifiedEventReason int,
@SusReqReasonID int,
@SusReqReturnDate datetime
AS
......
我也運行SQL Server Profiler中對會話,查看正在傳遞什麼數據庫,然而,在任何命中數據庫之前,錯誤都會出現,這似乎表明問題在ASP.NET的一面。
請檢查你的價值和現場數據類型... –
對不起,我應該提到,我已經在數據類型無數次檢查,他們所有的比賽。要我將所有內容都改爲SP中的Strings和Varchars)......我甚至確保參數的順序與SP中的順序相同(因爲我知道有些數據連接引擎需要這樣做)... – CJH
更新上面的代碼示例以包含完整更新參數和SP聲明。 – CJH