2015-12-02 131 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