【问题标题】:If Sql Server returns an error, then SqlException should be thrown. But it isn't如果 Sql Server 返回错误,则应抛出 SqlException。但它不是
【发布时间】:2023-03-19 09:37:01
【问题描述】:


如果我将 GridView 绑定到 SqlDataSource 并将 AutoGenerateEditButton 设置为 true,然后我尝试更新一个字段(该字段是数据库中的主键),那么数据库应该返回一个错误,因此应该抛出 SqlException?! 那么为什么page不报异常呢?相反,Gridview 所做的只是将该行中的所有字段设置回其原始值。


感谢


编辑:

你好,


当我使用以下代码执行相同的更新语句时,我得到无法更新身份列'EmployeeID'异常,所以我假设 Sql Server 在 GridView 尝试更新时确实报告了相同的错误,但出于某种原因未引发异常:

        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",但仍然没有引发异常

【问题讨论】:

  • 非常好的/有用的问题,+1 的问题。

标签: c# asp.net gridview ado.net


【解决方案1】:

如果您的 SQL 查询返回结果,则 C# 将获得该结果。如果您的 SQL 查询引发异常,则 C# 将获得该异常。这里不能混搭,不是衣柜。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      只要不会导致重复,您实际上应该能够修改主键而不会出错。

      【讨论】:

        【解决方案4】:

        您的DataKeyNames property 设置正确吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多