SqlDataSource UpdateParameters - 输入字符串的格式不正确

时间:2015-12-02 09:01:33

标签: asp.net sql-server sqldatasource updatecommand

我继承了一些我需要更新的ASP.NET代码,这导致我需要从字符串中更改ASP SqlDataSource的{​​{1}}(硬编码的SQL UpdateCommandType语句)到包含Update语句的存储过程。

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

无论如何,我刚刚将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>

我还针对会话运行SQL Server Profiler以查看传递给数据库的内容,但是在发生任何命中数据库之前出现错误,这似乎表明问题出在ASP.NET方面。< / p>

1 个答案:

答案 0 :(得分:0)

您的<asp:Parameter Name="EVENTID" />应该有一个数据类型。 我认为它应该是这样的..

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