我继承了一些需要更新的 ASP.NET 代码,这导致我需要将 ASPSqlDataSource
从UpdateCommandType
字符串(硬编码 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 方面。