GridView不报告异常

时间:2009-04-16 20:13:41

标签: c# asp.net sql-server gridview ado.net

如果我将GridView绑定到SqlDataSource并将AutoGenerateEditButton设置为true,如果我然后尝试更新字段(此字段是数据库中的主键),那么数据库应该返回错误,因此应该抛出SqlException?!

那么为什么页面报告异常呢?相反,所有Gridview都会将该行中的所有字段设置回原始值。


当我使用以下代码执行相同的更新语句时,我得到无法更新标识列'EmployeeID'异常,所以我假设当GridView尝试更新时,Sql Server确实报告了相同的错误,但是由于某种原因,没有提出异常:

        SqlConnection sc = new SqlConnection();
        sc.ConnectionString = @"Data source=localhost; integrated security=sspi; initial catalog=northwind;";
        SqlCommand sComand = new SqlCommand();

        sComand.Connection = sc;
        sComand.CommandText = "update Employees set EmployeeId=100,FirstName='Suzy',"+ 
                   "LastName='Smile',City='Moon' where EmployeeId=1";
        sc.Open();
        int I = sComand.ExecuteNonQuery();


顺便说一句 - 我尝试设置DataKeyNames =“EmployeeId”,但仍未提出异常

thanx

编辑:
您好,

很抱歉没有尽快回复,但我没有注意到我收到了回复。

无论如何,由于某种原因,它现在正在运行,这意味着GridView会报告异常。因此,我必须在我的代码中犯了一些错误,但由于我的代码不断重写,我不知道这个错误会在哪里。很抱歉浪费你的时间,谢谢你帮助我


2 个答案:

答案 0 :(得分:2)

查看错误和您的代码。它似乎是一个SQL数据库错误,而不是GridView的问题。

SQL不允许更新IDENTITY列,因为它们是由数据库引擎生成的。在这种情况下,“EmployeeId”就是这样一个领域。

答案 1 :(得分:0)

我遇到了同样的问题:我在对象数据源的选择处理程序中捕获了异常,但忘记将异常设置为已处理:e.ExceptionHandled = true。页面上没有我的错误消息呈现的页面,就像没有发生错误一样。 e.ExceptionHandled = true,一切都很好。