C# .NET4.0 TableAdapter.Update() nuk do të fusë rekord të ri

Unë kam një aplikacion të vogël i cili përbëhet nga një DAL, BLL dhe vetë aplikacioni të gjitha në projekte të ndryshme nën një zgjidhje në Visual Studio 2010.

DAL ime po përdor një skedar xsd për të kërkuar bazën e të dhënave dhe BLL ime ka metoda për të marrë informacionin nga DAL dhe për të bërë gjëra me të.

Aktualisht po përpiqem të fus një rekord duke përdorur kodin prapa aplikacionit për të bërë një thirrje në një metodë në BLL e cila më pas përpiqet të fusë rekordin duke përdorur metodën Tableadapter.Update() të krijuar në skedarin xsd të DAL.

Unë tashmë mund të zgjedh dhe përditësoj të dhënat pa problem, por nuk mund të fus të dhëna.

Me sa di unë, metoda TableAdapter.Update() duhet të dijë të fusë një rekord të ri nëse i jap një rresht të ri, megjithatë ajo po kthen një vlerë prej 0 - që do të thotë se 0 rreshta janë prekur, kështu që nuk funksionon.

Tabela në të cilën po përpiqem të fus quhet tblRoles.

Ai ka një kolonë 'ID', e cila është një kolonë int, çelësi kryesor dhe identiteti. Ka një kolonë 'Emri' që merr nvarchar(50), dhe ka 4 kolona 'CanAdduser' etj që marrin një lloj biti.

Këtu është kodi im:

Kodi i APP-së prapa:

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

Nga sa kuptoj unë, kjo duhet të fusë një rresht të ri në tabelë, por adapter.Update(row) vazhdon të kthejë një 0 dhe nuk e di pse.

Kur korrigjoj gabimet, mund të shoh që të gjitha kolonave të rreshtave u janë caktuar vlerat e sakta dhe nuk ka gabime.

Çdo ndihmë do të vlerësohej!

Redakto:

Harrova të përmend se kur konfigurova pyetjen e paracaktuar Fill,GetData() në skedarin xsd, u sigurova që ai të gjeneronte automatikisht deklaratat Insert, Update dhe Delete.


person Lucas    schedule 17.07.2011    source burimi


Përgjigjet (1)


Nuk e keni shtuar Role-Row-in e ri në 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)`
person Tim Schmelter    schedule 17.07.2011
comment
+1; kjo ka më shumë kuptim sesa përgjigja ime. Duket se shembujt e tjerë (tabelë e vetme?) nuk e quajnë AcceptChanges. - person Merlyn Morgan-Graham; 18.07.2011
comment
E shkëlqyer! Më keni shpëtuar nga shumë zhgënjime :) Faleminderit! Për të qenë i sinqertë, nuk isha vërtet i sigurt se si funksionoi e gjithë kjo, kështu që nuk e dija as që ekzistonte metoda Add~Row(). - person Lucas; 18.07.2011
comment
@Merlyn: adapter.Update do të thërrasë në mënyrë implicite AcceptChanges. msdn.microsoft.com/en-us/ biblioteka/ - person Tim Schmelter; 18.07.2011