如何使用数据访问层从 datagridview 和数据库中删除行

问题描述 投票:0回答:1

我正在构建一个带有 DataGridView 的 Windows 窗体,用于显示 SQL 服务器中的信息。 Windows 窗体如下所示:

按下“删除”按钮时,我有一个函数可以获取该行的 EmpId 并通过数据访问层从界面和 SQL 服务器中删除该行。

        public static void DeleteById(int EmpId)
        {
            Organization.EmployeesDataTable dtEmpTable = new Organization.EmployeesDataTable();
            OrganizationTableAdapters.EmployeesTableAdapter empAdapter = new OrganizationTableAdapters.EmployeesTableAdapter();
            empAdapter.Fill(dtEmpTable);

            foreach(Organization.EmployeesRow ur in dtEmpTable)
            {
                if(ur.EmpID == EmpId)
                {
                    ur.Delete();
                }
            }
            empAdapter.Update(dtEmpTable);

        }

但是,当我运行代码时,它会陷入

empAdapter.Update(dtEmpTable);
。错误如下:
System.Data.SqlClient.SqlException: 'Must declare the scalar variable "@IsNull_".'

我的逻辑有什么问题吗?我的假设是 .Update 函数很混乱,因为该行已被删除,因此没有任何内容可以“更新”。如果是这样的话,我该怎么做才能删除该行?

我希望该行在 Windows 窗体上消失,并且该行在 SQL 服务器中也消失。

c# winforms ssms
1个回答
0
投票
  1. 首先查看您的更新命令并确保其正确。
  2. 如果删除行后要使用数据表,则会出现错误。使用:
    dtEmpTable.Rows.Remove(ur);
    代替
    ur.Delete();
    请参阅:从数据表中删除特定行
  3. 从 dtEmpTable 中删除行后,接受更改:
    dtEmpTable.AcceptChanges();

这是微软官方推荐:

直接从数据库中删除记录 https://learn.microsoft.com/en-us/visualstudio/data-tools/directly-access-the-database-with-a-tableadapter?view=vs-2022&tabs=csharp

https://learn.microsoft.com/en-us/visualstudio/data-tools/save-data-with-the-tableadapter-dbdirect-methods?view=vs-2022&tabs=csharp

希望对你有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.