我有一个小的应用程序,它由DAL, BLL和应用程序本身组成,它们都在Visual Studio 2010的一个解决方案下的不同项目中。
我的DAL使用xsd文件来查询数据库,我的BLL有方法从DAL获取信息并使用它做事情。
目前,我正试图使用应用程序背后的代码插入记录,以调用BLL中的方法,然后尝试通过使用DAL的xsd文件中生成的Tableadapter.Update()方法插入记录。
我已经可以选择和更新记录没有问题,但我不能插入记录。
据我所知,TableAdapter.Update()方法应该知道插入一个新记录,如果我提供它一个新的行,但是它返回一个值0 -这意味着0行受到影响,所以它不工作。
我要插入的表名为tblRoles。
它有一个'ID'列,这是一个int,主键和标识列。它有一个'Name'列,参数为nvarchar(50),它有4个'CanAdduser'等列,参数为bit类型。
下面是我的代码: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()查询时,我确实确保它自动生成插入,更新和删除语句。
您还没有向DataTable添加新的Role-Row
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)`