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