public DALCKunde(){ //opret connection og sql udtryk myConn = SQLUtil.getInstance().connection(); string sql = "select * from GUEST"; dataAdapter = new SqlDataAdapter(sql,myConn); //opret dataset og fyld det fra dataadapter dataset = new DataSet(); dataAdapter.Fill(dataset,"guest"); //opret commandbuilder comBuilder = new SqlCommandBuilder(dataAdapter); //opret autogenererede sql sætninger dataAdapter.UpdateCommand = comBuilder.GetUpdateCommand(); dataAdapter.InsertCommand = comBuilder.GetInsertCommand(); dataAdapter.DeleteCommand = comBuilder.GetDeleteCommand();} }
public DataSet getGuests(){ return dataset;}
public DataSet UpdateKunde(DataSet ds){ //hvis opdatering mislykkes opstår der en exception try{ //åbn forbindelse til database myConn.Open(); //forsøg at opdater database. Modtag antal ændrede rækker //dataAdapter.Update(ds.GetChanges()); dataAdapter.Update(ds,"guest"); //luk forbindelse myConn.Close(); //hvis opdatering lykkes returner null return null; } catch(Exception e) { //ved exception returner nyt dataset return getGuests(); } }
public string kundeUpdate(Kunde k){ string found = "ikke fundet"; string okUpdate = "Dårlig update"; try { // får oid på Kunde der skal opdateres string id = k.Id; // henter table fra datasettet indeholdende Kunderne DataTable aktueltTable = dataset.Tables[0]; // finder row, der svarer til oid // og indsættes de nye værdier i row der svarer til oid foreach(DataRow drow in aktueltTable.Rows){ if((drow[0].ToString())==id) { drow[1] = k.FName; drow[2] = k.LName; drow[3] = k.Add; drow[4] = k.Zip; drow[5] = k.City; drow[6] = k.Country; drow[7] = k.Phone; drow[8] = k.Email; drow[9] = k.Remarks; }} // kalder update if (dataset.HasChanges()){ try { UpdateKunde(dataset); dataset.AcceptChanges(); okUpdate = "ok update"; } catch(Exception exc){ } } else { return found; } return okUpdate; } catch(Exception e){ return okUpdate; . . .
Skal lige have ændret min try / catch, så den ikke alligevel sætter "okupdate" til. Når jeg kører programmet og sætter et breakpoint ved "myconn.open()" kører den fint nok dertil, men den kan ikke udføre "dataadapter.upda....".Herfra springer den bare ned til catch exception uden at lave nogen opdateringer.
Håber at der er nogen der kan hjælpe mig. Mvh Mogli
må hellere lige skrive, at når jeg kalder "hasChanges()" så siger den godt nok at den har det. Ligeledes, så når jeg kører det oprindelige dataset igennem for at finde den rigtige row, finder den også godtnok den person der skal ændres
Har du set på hvilken exception 'e' indeholder? Prøv at udskrive e.Message, så går du hele svaret dér. Alternativt kan du helt fjerne din catch/try for en stund, så du direkte får fejlbeskeden fra debuggeren.
Det eneste den skriver er: Line 1: Incorrect syntax near 'name'
Går ud fra at det er fordi at der er problemer med >>dataAdapter.Update(ds,"guest");<< og nærmere betegnet ,"guest". Men hvordan kan man lige løse dette
At system.Data.Common.DbDataadapter.Update(Datarow[] datarows, DataTableMapping tablemapping) At system.Data.Common.DbDataadapter.Update(DataSet dataset,String srcTable) At Database.DALCKunde.updateKunde(DataSet ds) in c:\.....\dalckunde.cs: line 87
Fejlen sker i linje 1, og ikke i linje 87. Er du sikker på at du kigger i den rigtige fil ? Iøvrigt, har du evt. en kolonne 'name' som indeholder ugyldig data?
Sådan som jeg ser det, så er det linie 1 i updatemetode der går galt. altså noget af det autogenereret der går galt. Det fører så tilbage til metoden i linie 87. Jeg har ikke nogen kolonne i databasen der hedder name.
Så kører det. Efter megen møg og besvær fik jeg konstrueret en updatemetode der ville som jeg ville. Men istedet for kun at have én linie hvor dataadapteren selv sørgede for at opette den, så fylder metoden nu ~80 linier:-) - Cyberfessor, kan du ikke lige smide et svar. Selvom du ikke helt svarede på spg, så duede dig andet forslag jo, så point skal du da have.
Jeg kunne nok vinde noget hastighedmæssigt, ved at bruge stored procedures. Men hva,kan jo lave det om senere hvis det er. Takker mange gange for hjælpen endnu engang
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.