C# .NET4.0 TableAdapter.Update() neievietos jaunu ierakstu

Man ir neliela lietojumprogramma, kas sastāv no DAL, BLL un pašas lietojumprogrammas dažādos projektos vienā risinājumā programmā Visual Studio 2010.

Mans DAL izmanto xsd failu, lai vaicātu datu bāzē, un manam BLL ir metodes, kā iegūt informāciju no DAL un ar to rīkoties.

Pašlaik mēģinu ievietot ierakstu, izmantojot kodu, kas atrodas aiz lietojumprogrammas, lai izsauktu metodi BLL, kas pēc tam mēģina ievietot ierakstu, izmantojot metodi Tableadapter.Update(), kas ģenerēta DAL xsd failā.

Es jau varu bez problēmām atlasīt un atjaunināt ierakstus, bet nevaru ievietot ierakstus.

Cik es zinu, metodei TableAdapter.Update() ir jāzina, lai ievietotu jaunu ierakstu, ja es to nodrošināju ar jaunu rindu, tomēr tā atgriež vērtību 0 — tas nozīmē, ka tika ietekmētas 0 rindas, tāpēc tā nedarbojas.

Tabulu, kurā mēģinu ievietot, sauc par tblRoles.

Tam ir sleja “ID”, kas ir int, primārās atslēgas un identitātes kolonna. Tam ir kolonna "Nosaukums", kas aizņem nvarchar (50), un tai ir 4 kolonnas "CanAdduser" utt., kas aizņem noteikta veida bitu.

Šeit ir mans kods:

APP kods aiz:

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

Cik es saprotu, tabulā jāievieto jauna rinda, taču adapter.Update(row) turpina atdot 0, un es nezinu, kāpēc.

Atkļūdojot, es redzu, ka visām rindu kolonnām ir piešķirtas pareizās vērtības un kļūdas netiek izmestas.

Jebkāda palīdzība būtu pateicīga!

Rediģēt:

Es aizmirsu pieminēt, ka, konfigurējot noklusējuma vaicājumu Fill,GetData() xsd failā, es pārliecinājos, ka tas automātiski ģenerē Insert, Update un Delete priekšrakstus.


person Lucas    schedule 17.07.2011    source avots


Atbildes (1)


Jūs neesat pievienojis jauno lomu rindu datu tabulai.

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; tam ir lielāka jēga nekā manai atbildei. Šķiet, ka citi (vienas tabulas?) piemēri neizsauc AcceptChanges. - person Merlyn Morgan-Graham; 18.07.2011
comment
Izcili! Tu man esi izglābis no lielas vilšanās :) Paldies! Godīgi sakot, es nebiju īsti pārliecināts, kā tas viss darbojas, tāpēc es pat nezināju, ka Add~Row() metode vispār pastāv. - person Lucas; 18.07.2011
comment
@Merlyn: adapter.Update netieši izsauks AcceptChanges. msdn.microsoft.com/en-us/ bibliotēka/ - person Tim Schmelter; 18.07.2011