如果Sql Server返回错误,则应抛出SqlException。但事实并非如此

时间:2009-04-08 21:41:37

标签: c# asp.net 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属性是否设置正确?

我尝试设置DataKeyNames =“EmployeeId”,但仍然没有引发异常

4 个答案:

答案 0 :(得分:2)

如果您的SQL查询返回结果,那么C#将获得该结果。如果您的SQL查询抛出异常,那么C#将获得该异常。你不能在这里混搭,它不是衣橱。

答案 1 :(得分:2)

仅当T-SQL中的ERROR严重性为16或更高AFAIK时,才会抛出异常。因此,并非SQL Server中的所有错误都相同。

答案 2 :(得分:2)

您实际上应该能够无错误地修改主键,只要它不会导致重复。

答案 3 :(得分:1)

您的DataKeyNames property设置正确吗?