【发布时间】:2014-05-13 04:37:33
【问题描述】:
我什至不确定 SessionParameters 与普通参数相比是如何使用的。我要做的是根据我知道存在的会话变量“StaffID”中的值更新或将记录插入到我的数据库中(基于调试 PageLoad 事件)。事实证明,我的“StaffID”会话实际上是 NULL(在详尽调试后发现),并且我在尝试使用空值更新表时遇到异常。
我的 SqlDataSource 是这样的......
<asp:SqlDataSource ID="SqlDataProgmDetails" runat="server" ConnectionString="<%$ ConnectionStrings:ATCNTV1ConnectionString %>"
UpdateCommand="UPDATE tblStudentProgramReg SET StaffModified = @StaffModified, DateModified = GETDATE() WHERE (ProgramEnrolmentID = @ProgramEnrolmentID)">
<UpdateParameters>
<asp:Parameter Name="EnrolmentDate" Type="DateTime" />
<asp:Parameter Name="StudentProgramNotes" Type="String" />
<asp:Parameter Name="TerminationDate" Type="DateTime" />
<asp:Parameter Name="StudProgEnrolStatusID" />
<asp:Parameter Name="QualificationCode" />
<asp:ControlParameter ControlID="gvPrograms" Name="ProgramEnrolmentID" Type="Int32" PropertyName="SelectedValue" />
<asp:SessionParameter Name="StaffModified" SessionField="StaffID" />
</UpdateParameters>
rs>
</asp:SqlDataSource>
当我更新我的 DetailsView 时,我得到了可怕的“字符串或二进制数据将被截断。 语句已终止。”错误。
我知道这种情况正在发生,因为我确信在某一时刻存在的“StaffID”会话变量在上述 SqlDataSource 的 UPDATE 阶段为 NULL。
我发现的唯一解决方法是强制加载 CodeBehind 中的值 ...
protected void SqlDataProgmDetails_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
if (Session["StaffID"] != null)
{
e.Command.Parameters[5].Value = Session["StaffID"].ToString().Trim();
}
}
protected void SqlDataProgmDetails_Inserting1(object sender, SqlDataSourceCommandEventArgs e)
{
if (Session["StaffID"] != null)
{
e.Command.Parameters[8].Value = Session["StaffID"].ToString().Trim();
}
}
但我为什么要这样做呢?
我原以为 StaffID 应该根据我的 ASP 页面中的 SessionParameter 请求自动加载。
就像我说的,我不确定 SessionParameters(或 Session 变量)一般是如何工作的,所以如果有人可以解释为什么我必须使用代码隐藏来让它工作,那将不胜感激?
谢谢
【问题讨论】: