2015-12-02 128 views
0

我繼承了一些需要更新的ASP.NET代碼,這導致我需要從字符串中更改ASP SqlDataSourceUpdateCommandType(硬編碼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的一面。

+0

請檢查你的價值和現場數據類型... –

+0

對不起,我應該提到,我已經在數據類型無數次檢查,他們所有的比賽。要我將所有內容都改爲SP中的Strings和Varchars)......我甚至確保參數的順序與SP中的順序相同(因爲我知道有些數據連接引擎需要這樣做)... – CJH

+0

更新上面的代碼示例以包含完整更新參數和SP聲明。 – CJH

回答

0

您的<asp:Parameter Name="EVENTID" />應該有一個數據類型。 我想應該是這樣的..

<asp:Parameter Name="EVENTID" Type="Int32" /> 
+0

啊,我複製了一個壞樣本 - 我一直在做很多玩耍,並錯過了片段...我只想說,即使你提到的數據類型聲明 - 我得到同樣的問題... – CJH

+0

我也剝奪了參數只是一個,看看是否有一個導致問題,但只是繼續得到相同的錯誤.. 。我甚至嘗試設置NO更新參數並將它們從SP中刪除......當我這樣做時,我得到一個錯誤,指出SP不需要參數,但它們正在被傳遞......即使我沒有聲明任何參數。因此,我不知道控制綁定是否有效地創建了一個參數? – CJH

+0

你確定EVENTID有價值嗎?你的錯誤似乎很明顯。它不是整數或空值。 @ChrisHill – ninja