0

我继承了一些需要更新的 ASP.NET 代码,这导致我需要将 ASPSqlDataSourceUpdateCommandType字符串(硬编码 SQLUpdate语句)更改为包含该Update语句的存储过程。

该字符串执行良好并使用绑定到详细信息视图中的控件的参数(我知道这不是最佳实践,它让我不得不处理来自客户端的数据连接......!但我没有时间重新写这个和许多页面的所有数据连接)。

无论如何,我刚刚将其更改为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 方面。

4

1 回答 1

0

<asp:Parameter Name="EVENTID" />应该有一个数据类型。我觉得应该是这样的。。

 <asp:Parameter Name="EVENTID" Type="Int32" />
于 2015-12-02T09:15:54.243 回答