如何使用文本框从数据库编辑/更新记录?

问题描述:

我有一个问题,我想你的帮助。我在我的页面中有一个编辑按钮和文本框。我想从数据库中编辑一条记录到这些文本框。我编写了下面的代码,当我点击编辑按钮时,我得到了结果。结果加载到我的文本框中。但是当我再次尝试第二次运行具有相同ID的页面时,则出现此错误“指定的转换无效”。出了什么问题?我用int ID = 3;以获得第三记录在该示例如何使用文本框从数据库编辑/更新记录?

保护无效Button2_Click(对象发件人,EventArgs的)

{

DataClassesDataContext CXT =新DataClassesDataContext(); USER_TABLE aChar = cxt.USER_TABLEs.Single(c => c.ID == 3); //获取单个记录

  fname2.Text = aChar.FIRST_NAME; 
      lname2.Text = aChar.LAST_NAME; 
      pob2.Text = aChar.PLACE_OF_BIRTH; 
      pom2.Text = aChar.PLACE_OF_MARRIAGE; 
      education2.Text = aChar.EDUCATION; 
      occupation2.Text = aChar.OCCUPATION; 
      pod2.Text = aChar.PLACE_OF_DEATH; 
      String str = aChar.DATE_OF_BIRTH.ToString(); 
      String str1 = aChar.DATE_OF_MARRIAGE.ToString(); 
      String str2 = aChar.DATE_OF_DEATH.ToString(); 
+0

你的问题与LINQ没有任何关系。我会编辑你的问题。 – 2011-03-21 09:52:21

+0

斯蒂芬 - 他正在使用Linq-to-sql - 所以也许删除sql和linq并将linq-to-sql放入? – Stuart 2011-03-21 09:56:05

+0

您确实有一个LINQ调用(.Single),但它显然不会导致问题,因为您的站点在异常时没有失败(如果该LINQ调用失败,Single将引发异常) - 否则您将看到一个错误输出,而不是相同的页面。 – 2011-03-21 09:57:23

你为什么这样做在事件处理代码if (!Page.IsPostBack)

我会说,正常的事件时回后,才会引发...

我很少看到比pageLoad的任何其他的IsPostBack使用。

+0

ok!我删除了if(!Page.IsPostBack)。再次,我有相同的页面没有结果。什么都没有!问题出在ID身上。出于这个代码无法获得的原因。 – dali1985 2011-03-21 09:53:54

+0

首先,你应该修改你的问题。其次,您设置ID = 3,然后立即用传入请求的ID覆盖它。如果与您的URL一起传递的ID参数不是有效的数字,则TryParse将失败,您将无法获得任何内容。 – 2011-03-21 09:59:52

+0

谢谢史蒂芬的评论!那么你认为我可以改变以获得第三个ID的记录? – dali1985 2011-03-21 10:09:43

您需要更改明确地保存上下文

​​
+0

你的意思是我必须将这个上下文添加到我的代码中?因为我的UPDATE按钮中有这个上下文 – dali1985 2011-03-21 10:07:04

+0

将它添加为最后一行 - 如果你不叫它,那么你赢了不更新数据库。请参阅http://www.richardbushnell.net/2008/02/18/how-to-update-data-with-linq-to-sql/中的示例 - 获取数据,更新数据,提交更改 – Stuart 2011-03-21 10:11:20

看来,你取你的对象(使用单)时,得到一个指定的转换异常。您可能希望检查对象模型和数据库之间的数据类型,以确保该对象在数据库使用字符串的位置不需要数字(反之亦然)。另外,请检查对象和数据库列的可空性。绑定时,LINQ to SQL不支持隐式类型转换。

至于为什么它正在处理第一个请求,而不是第二个,请求之间发生了什么变化?此外,这两个请求之间的上下文是否保持活跃?当第二次请求相同的ID时,单缓存所提取的值并使查询管道短路,因此对于Single,如果环境保持活动状态,则只应看到一个数据库请求。尝试使用ctx.Log = Console.Out记录数据库请求,或者使用SQL Profiler(如果有)。