C# .NET4.0 TableAdapter.Update() yeni qeyd daxil etməyəcək

Visual Studio 2010-da bir həll altında müxtəlif layihələrdə DAL, BLL və Tətbiqin özündən ibarət kiçik bir tətbiqim var.

Mənim DAL-ım verilənlər bazasını sorğulamaq üçün xsd faylından istifadə edir və BLL-də DAL-dan məlumat almaq və onunla iş görmək üsulları var.

Hal-hazırda mən BLL-dəki metoda zəng etmək üçün proqramın arxasındakı koddan istifadə edərək qeyd daxil etməyə çalışıram, bu metod daha sonra DAL-ın xsd faylında yaradılan Tableadapter.Update() metodundan istifadə edərək qeydi daxil etməyə çalışır.

Mən artıq heç bir problem olmadan qeydləri seçə və yeniləyə bilirəm, lakin qeydləri daxil edə bilmirəm.

Bildiyimə görə, TableAdapter.Update() metodu onu yeni cərgə ilə təmin etsəm, yeni qeyd daxil etməyi bilməlidir, lakin o, 0 dəyərini qaytarır – yəni 0 sətir təsirləndi, ona görə də işləmir.

Daxil etməyə çalışdığım cədvəl tblRoles adlanır.

Onun int, əsas açar və şəxsiyyət sütunu olan "ID" sütunu var. Onun nvarchar(50) götürən 'Ad' sütunu və bir növ bit alan 4 'CanAdduser' və s. sütunları var.

Budur mənim kodum:

Arxadakı APP kodu:

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;
}

Anladığım qədər bu cədvələ yeni sətir daxil etməlidir, lakin adapter.Update(row) 0 qaytarmağa davam edir və mən niyə bilmirəm.

Debuq edərkən bütün sətir sütunlarına düzgün qiymətlərin təyin edildiyini və heç bir səhvin atılmadığını görə bilərəm.

Hər hansı bir yardım yüksək qiymətləndiriləcəkdir!

Redaktə edin:

Qeyd etməyi unutdum ki, mən xsd faylında defolt Fill,GetData() sorğusunu konfiqurasiya edəndə onun Daxil Et, Yeniləmə və Sil ifadələrini avtomatik yaratdığına əmin oldum.


person Lucas    schedule 17.07.2011    source mənbə


Cavablar (1)


Siz Data Cədvəlinə yeni Rol Sətirini əlavə etməmisiniz.

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)`
person Tim Schmelter    schedule 17.07.2011
comment
+1; bu mənim cavabımdan daha məntiqlidir. Deyəsən, başqa (tək cədvəl?) nümunələr AcceptChanges adlandırmır. - person Merlyn Morgan-Graham; 18.07.2011
comment
Parlaq! Siz məni çox məyusluqdan xilas etdiniz :) Təşəkkür edirəm! Düzünü desəm, hamısının necə işlədiyinə tam əmin deyildim, ona görə də Add~Row() metodunun mövcud olduğunu belə bilmirdim. - person Lucas; 18.07.2011
comment
@Merlyn: adapter.Update gizli şəkildə AcceptChanges-ə zəng edəcək. msdn.microsoft.com/en-us/ kitabxana/ - person Tim Schmelter; 18.07.2011