我有一个小应用程序,它包含一个DAL,BLL和Application本身,它们都在Visual Studio 2010中的一个解决方案下的不同项目中。
我的DAL正在使用xsd文件来查询数据库,我的BLL有方法从DAL获取信息并使用它做任务。
目前我正在尝试使用应用程序后面的代码插入记录来调用BLL中的方法,然后尝试使用在xsd文件中生成的Tableadapter.Update()方法插入记录。 DAL。
我已经可以选择并更新记录没有问题,但我无法插入记录。
据我所知,TableAdapter.Update()方法应该知道如果我为它提供一个新行,就插入一条新记录,但它返回的值为0 - 意味着0行受到影响,所以它不是'工作。
我想插入的表名为tblRoles。
它有一个'ID'列,它是一个int,主键和标识列。它有一个'Name'列,它带有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()查询时,我确实自动生成了Insert,Update和Delete语句。
答案 0 :(得分: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)`