我继承了一些需要更新的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