C# .NET4.0 TableAdapter.Update() ei lisää uutta tietuetta

Minulla on pieni sovellus, joka koostuu DAL:sta, BLL:stä ja itse sovelluksesta kaikki eri projekteissa yhden ratkaisun alla Visual Studio 2010:ssä.

DAL käyttää xsd-tiedostoa tietokannan kyselyyn ja BLL:lläni on menetelmiä saada tiedot DAL:sta ja tehdä asioita sen kanssa.

Tällä hetkellä yritän lisätä tietueen käyttämällä sovelluksen takana olevaa koodia kutsuakseni menetelmää BLL:ssä, joka sitten yrittää lisätä tietueen käyttämällä Tableadapter.Update()-menetelmää, joka on luotu DAL:n xsd-tiedostossa.

Voin jo valita ja päivittää tietueita ilman ongelmia, mutta en voi lisätä tietueita.

Sikäli kuin tiedän, TableAdapter.Update()-metodin pitäisi osata lisätä uusi tietue, jos annan sille uuden rivin, mutta se palauttaa arvon 0 - mikä tarkoittaa, että se vaikuttaa 0 riviin, joten se ei toimi.

Taulukkoa, johon yritän lisätä, kutsutaan nimellä tblRoles.

Siinä on ID-sarake, joka on int-, ensisijainen avain- ja identiteettisarake. Siinä on 'Name'-sarake, joka ottaa nvarchar(50), ja siinä on 4 'CanAdduser' jne. saraketta, jotka ottavat tietyn tyyppisen bitin.

Tässä on minun koodini:

APP-koodi takana:

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

Ymmärtääkseni tämän pitäisi lisätä uusi rivi taulukkoon, mutta adapter.Update(row) palauttaa jatkuvasti nollan, enkä tiedä miksi.

Kun teen virheenkorjauksen, näen, että kaikille rivisarakkeille on määritetty oikeat arvot, eikä virheitä esiinny.

Kaikki apu olisi tervetullutta!

Muokkaa:

Unohdin mainita, että kun määritin oletusarvoisen Fill,GetData()-kyselyn xsd-tiedostossa, varmistin, että se luo automaattisesti Insert-, Update- ja Delete-käskyt.


person Lucas    schedule 17.07.2011    source lähde


Vastaukset (1)


Et ole lisännyt uutta rooliriviä tietotaulukkoon.

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; tämä on järkevämpää kuin vastaukseni. Näyttää siltä, ​​että muut (yhden taulukon?) esimerkit eivät kutsu AcceptChanges. - person Merlyn Morgan-Graham; 18.07.2011
comment
Loistava! Säästit minut monelta turhautumiselta :) Kiitos! Rehellisesti sanottuna en ollut varma, kuinka se kaikki toimi, joten en edes tiennyt, että Add~Row() -menetelmää edes oli olemassa. - person Lucas; 18.07.2011
comment
@Merlyn: adapter.Update kutsuu epäsuorasti numeroa AcceptChanges. msdn.microsoft.com/en-us/ kirjasto/ - person Tim Schmelter; 18.07.2011