我有问题,我希望得到你的帮助。我的页面中有一个编辑按钮和文本框。我想编辑从数据库到这些文本框的单个记录。我写了下面的代码,当我点击编辑按钮然后我有结果。结果加载到我的文本框中。但是,当我再次尝试使用相同的ID运行第二次页面时,我发出此错误“指定的强制转换无效”。出了什么问题?我使用int ID = 3;获得此示例中的第3条记录
protected void Button2_Click(object sender,EventArgs e)
{
DataClassesDataContext cxt = new 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 :(得分:0)
为什么在事件处理程序代码中执行if (!Page.IsPostBack)
?
我会说通常情况只会在回发后提出......
我很少看到除了PageLoad以外的任何东西都使用了IsPostBack。
答案 1 :(得分:0)
您需要明确保存对上下文的更改
cxt.SubmitChanges();
答案 2 :(得分:0)
在获取对象时,您似乎获得了指定的强制转换异常(使用Single)。您可能需要检查对象模型和数据库之间的数据类型,以确保对象不期望数据库使用字符串的数字(反之亦然)。另外,检查对象和数据库列的可为空性。 LINQ to SQL在绑定时不支持隐式类型转换。
至于为什么它正在处理第一个请求,而不是第二个请求,请求之间发生了什么变化?此外,两个请求之间的上下文是否保持活动状态?当第二次请求相同的ID时,Single缓存获取的值并使查询管道短路,因此对于Single,如果上下文保持活动,您应该只看到一个数据库请求。尝试使用ctx.Log = Console.Out来记录您的数据库请求,如果有的话,请尝试使用SQL Profiler。