C# 尝试更新记录,但更新代码仅更新一个时间戳字段,而不更新其他内容
我有一个需要更新记录的数据库表。添加新记录的代码工作正常,但当我更新现有记录时,并不是所有字段都会使用表单中的新信息进行更新 代码如下:C# 尝试更新记录,但更新代码仅更新一个时间戳字段,而不更新其他内容,c#,asp.net,sql-server,linq-to-sql,C#,Asp.net,Sql Server,Linq To Sql,我有一个需要更新记录的数据库表。添加新记录的代码工作正常,但当我更新现有记录时,并不是所有字段都会使用表单中的新信息进行更新 代码如下: private void updateExistingDSN() { //Update existing DSN try { using (PathFinderDataContext pfdcContext = new PathFinderDataContext())
private void updateExistingDSN()
{
//Update existing DSN
try
{
using (PathFinderDataContext pfdcContext = new PathFinderDataContext())
{
DSN oldDSN = pfdcContext.DSNs.Single(dsn => dsn.DSNID == int.Parse(Request["dsn"]));
oldDSN.Auth_AuthorizationID = int.Parse(Request["auth"]);
oldDSN.ServiceProvided_ServiceProvidedID = int.Parse(Request["sp"]);
oldDSN.EvidenceBPMU = short.Parse(ddlEvidenceBPMU.SelectedValue);
oldDSN.LocationOfVisit = txtLocationOfVisit.Text;
oldDSN.ChildrenPresent = txtNamesOfChildrenPresent.Text;
oldDSN.ParentPresent = txtNamesOfParentsPresent.Text;
oldDSN.OthersPresent = txtNamesOfOthersPresent.Text;
oldDSN.DescribeGoals = txtDescribeGoals.Text;
oldDSN.DescribeStrategy = txtDescribeStrategies.Text;
oldDSN.DescibeParentingSkills = txtDescribeParentingSkills.Text;
oldDSN.DescribeSafetyConcerns = txtDescribeSafetyConcerns.Text;
oldDSN.OtherInfo = txtOtherInfo.Text;
oldDSN.Schedule_Monday = float.Parse(txtMonday.Text);
oldDSN.Schedule_Tuesday = float.Parse(txtTuesday.Text);
oldDSN.Schedule_Wednesday = float.Parse(txtWednesday.Text);
oldDSN.Schedule_Thursday = float.Parse(txtThursday.Text);
oldDSN.Schedule_Friday = float.Parse(txtFriday.Text);
oldDSN.Schedule_Saturday = float.Parse(txtSaturday.Text);
oldDSN.Schedule_Sunday = float.Parse(txtSunday.Text);
oldDSN.DateSaved = DateTime.Now;
oldDSN.SavedBy_UserID = currentEmployee.EmployeeID;
pfdcContext.SubmitChanges();
}
Response.Redirect("~/pages/updateTimesheet.aspx?action=update&ProvidedServiceId=" + int.Parse(Request["sp"]));
}
catch (Exception ex)
{
errorMessage.Text = "<b>Error updating an existing DSN record!</b><br /><br />" + ex.ToString();
warnings.Visible = true;
}
}
private void updateExistingDSN()
{
//更新现有DSN
尝试
{
使用(PathFinderDataContext pfdcContext=new PathFinderDataContext())
{
DSN oldDSN=pfdcContext.DSNs.Single(DSN=>DSN.DSNID==int.Parse(请求[“DSN”]);
oldDSN.Auth_AuthorizationID=int.Parse(请求[“Auth”]);
oldDSN.serviceprovedId=int.Parse(请求[“sp”]);
oldDSN.取证BPMU=short.Parse(ddl取证BPMU.SelectedValue);
oldDSN.LocationOfVisit=txtLocationOfVisit.Text;
oldDSN.ChildrenPresent=txtNamesOfChildrenPresent.Text;
oldDSN.ParentPresent=txtnamesofparentpresent.Text;
oldDSN.OthersPresent=txtNamesOfOthersPresent.Text;
oldDSN.descripbegoals=txtsdescripbegoals.Text;
oldDSN.descripbestrategy=txtddescripbestrategies.Text;
oldDSN.DescibeParentingSkills=txtdescriptibeparentingskills.Text;
oldDSN.DescribeSafetyConcerns=txtDescribeSafetyConcerns.Text;
oldDSN.OtherInfo=txtOtherInfo.Text;
oldDSN.Schedule_Monday=float.Parse(txtmanday.Text);
oldDSN.Schedule_tuday=float.Parse(txtdesday.Text);
oldDSN.Schedule_周三=float.Parse(txt周三.Text);
oldDSN.Schedule_thresday=float.Parse(txtdesday.Text);
oldDSN.Schedule_Friday=float.Parse(txtFriday.Text);
oldDSN.Schedule_Saturday=float.Parse(txtstaturday.Text);
oldDSN.Schedule_Sunday=float.Parse(txtsdanday.Text);
oldDSN.DateSaved=DateTime.Now;
oldDSN.SavedBy_UserID=currentEmployee.EmployeeID;
pfdcContext.SubmitChanges();
}
Response.Redirect(“~/pages/updateTimesheet.aspx?action=update&ProvidedServiceId=“+int.Parse(Request[“sp]”));
}
捕获(例外情况除外)
{
errorMessage.Text=“更新现有DSN记录时出错!
”+ex.ToString();
警告。可见=真;
}
}
唯一更新的字段是oldDSN.DateSaved,其他所有字段保持不变。没有抛出错误或异常或任何东西。表现得好像有用,但没有。另外,当我硬编码要更新的值时,记录会很好地更新。有什么想法吗?在您的
页面_Load
(将数据源中的信息放入文本框等)中,您需要将数据绑定代码包装在If(Page.IsPostBack)
块中
因此,您的代码应该如下所示:
protected void Page_Load (object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
// Whatever you use to load the data from the database into
// your server controls goes here
loadData(); // example
}
}
这就是为什么您没有获得更新的信息-在更新代码有机会运行之前,您的标记元素正在从数据库中重新加载。在
页面中_Load
(将数据源中的信息放入文本框等),您需要将数据绑定代码包装在If(Page.IsPostBack)中
block
因此,您的代码应该如下所示:
protected void Page_Load (object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
// Whatever you use to load the data from the database into
// your server controls goes here
loadData(); // example
}
}
这就是为什么您没有获得更新的信息-在更新代码有机会运行之前,正在从数据库重新加载标记元素。调试代码并检查是否有要更新的值。如果您使用的是visual studio,尝试在方法顶部设置断点,然后右键单击->监视旧DSN。检查所有值是否正确更新。我无法不冒犯地说这句话:因为唯一被更新的值是不是由代码生成的(DateTime.Now),我感觉很可能是您的代码生成了不正确的值。我现在正在逐步检查代码。等一下,我会更新并让你知道发生了什么。好的,发生的事情是:代码似乎工作得很好,但是当它从HTML元素(文本框等)抓取文本时,它不会抓取新键入的信息,它会抓取在page_load运行时放在文本框中的内容,当然,旧的值,因此使它看起来好像没有更新它们。。。但是,我不明白为什么它不能获取刚刚键入的信息。请调试代码并检查是否有要更新的值。如果您使用的是visual studio,请尝试在方法顶部设置断点,然后右键单击->观看旧DSN。检查所有值是否正确更新。我无法不冒犯地说这句话:因为唯一被更新的值是不是由代码生成的(DateTime.Now),我感觉很可能是您的代码生成了不正确的值。我现在正在逐步检查代码。等一下,我会更新并让你知道发生了什么。好的,发生的事情是:代码似乎工作得很好,但是当它从HTML元素(文本框等)抓取文本时,它不会抓取新键入的信息,它会抓取在page_load运行时放在文本框中的内容,当然,旧的值,因此使它看起来好像没有更新它们。。。我不明白为什么它不能抓取刚刚输入的信息。谢谢你。我工作时被困在这里一两天了,一直想不出来。花了很长时间查看我的更新代码,甚至没有想到查看我代码的这一部分。再次感谢@克里斯汉森很高兴我能帮上忙!谢谢你。我已经在这里工作了一两天了,不能休息了