C# .NET4.0 TableAdapter.Update() 不会插入新记录

Posted

技术标签:

【中文标题】C# .NET4.0 TableAdapter.Update() 不会插入新记录【英文标题】:C# .NET4.0 TableAdapter.Update() won't insert new record 【发布时间】:2011-10-07 07:25:53 【问题描述】:

我有一个小型应用程序,它由 DAL、BLL 和应用程序本身组成,所有这些都在 Visual Studio 2010 中的一个解决方案下的不同项目中。

我的 DAL 正在使用 xsd 文件来查询数据库,而我的 BLL 具有从 DAL 获取信息并对其进行处理的方法。

目前,我正在尝试使用应用程序背后的代码插入记录,以调用 BLL 中的方法,然后尝试使用在 xsd 文件中生成的 Tableadapter.Update() 方法插入记录DAL。

我已经可以毫无问题地选择和更新记录,但我不能插入记录。

据我所知,如果我向 TableAdapter.Update() 方法提供新行,它应该知道插入新记录,但是它返回的值是 0 - 意味着 0 行受到影响,所以它不是不工作。

我要插入的表称为 tblRoles。

它有一个“ID”列,它是一个 int、主键和标识列。它有一个“名称”列,采用 nvarchar(50),它有 4 个“CanAdduser”等列,采用一种位类型。

这是我的代码:

APP后面代码:

protected void CreateRole(object sender, EventArgs e) 
    RolesBL roles = new RolesBL();

    roles.CreateRole(NewRoleName.Text);

    RolesGridView.DataBind();

BLL:

private tblRolesTableAdapter adapter = new tblRolesTableAdapter();

public bool CreateRole(string Name) 
    CMSDS.tblRolesDataTable roles = new CMSDS.tblRolesDataTable();
    CMSDS.tblRolesRow row = roles.NewtblRolesRow();

    row.Name = Name;
    row.CanAddUsers = false;
    row.CanEditUsers = false;
    row.CanSuspendUsers = false;
    row.CanChangeUserPasswords = false;

    int result = adapter.Update(row);

    if(result == 1) 
        return true;
    

    return false;

据我了解,这应该在表中插入一个新行,但 adapter.Update(row) 不断返回 0,我不知道为什么。

当我调试时,我可以看到所有行列都被分配了正确的值,并且没有抛出任何错误。

任何帮助将不胜感激!

编辑:

我忘了提到,当我在 xsd 文件中配置默认​​的 Fill,GetData() 查询时,我确实确保它自动生成了插入、更新和删除语句。

【问题讨论】:

【参考方案1】:

您尚未将新的 Role-Row 添加到 DataTable。

CMSDS.tblRolesDataTable roles = new CMSDS.tblRolesDataTable();
CMSDS.tblRolesRow row = roles.NewtblRolesRow();
row.Name = Name;
roles.AddtblRolesRow(row); 
int result = adapter.Update(roles); //the same as `adapter.Update(row)`

【讨论】:

+1;这比我的回答更有意义。似乎其他(单表?)示例不调用AcceptChanges 太棒了!你救了我很多挫折:) 谢谢!老实说,我并不确定它是如何工作的,所以我什至不知道 Add~Row() 方法是否存在。 @Merlyn: adapter.Update 将隐式调用AcceptChanges。 msdn.microsoft.com/en-us/library/…

以上是关于C# .NET4.0 TableAdapter.Update() 不会插入新记录的主要内容,如果未能解决你的问题,请参考以下文章

C# C# 11 ( .Net 7.0)Visual Studio 2022

C# 6.0 是不是适用于 .NET 4.0?

在 .NET 4.0 (C#) 中动态实现接口

c# .net4.0验证视图状态 MAC 失败!试过网上的webconfig 节点添加配置,在网页page添加属性均无效。

C# SSL WebSocket Client 中是不是有.net 4.0?

C# 中的动态类型