0

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

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

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

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

据我所知,如果我向 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() 查询时,我确实确保它自动生成了 Insert、Update 和 Delete 语句。

4

1 回答 1

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)`
于 2011-07-17T22:05:55.563 回答