Avatar billede mogli Nybegynder
12. september 2003 - 17:01 Der er 13 kommentarer og
1 løsning

Hvorfor kan jeg ikke få min dataadapter.update() til at du?

private SqlConnection myConn;
private DataSet dataset;
private SqlDataAdapter dataAdapter;
private SqlCommandBuilder comBuilder;
//private SqlCommand cmd;

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
Avatar billede mogli Nybegynder
12. september 2003 - 17:03 #1
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
Avatar billede odegaard Nybegynder
12. september 2003 - 18:26 #2
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.
Avatar billede odegaard Nybegynder
12. september 2003 - 18:27 #3
så 'går' du selvfølgelig ikke hele svaret. Du 'får' det :-)
Avatar billede mogli Nybegynder
12. september 2003 - 19:19 #4
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
Avatar billede mogli Nybegynder
12. september 2003 - 19:33 #5
hvis jeg laver en e.stacktrace på den, så kommer:

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

og linie 87 er:    dataAdapter.Update(ds,"guest");
Avatar billede odegaard Nybegynder
12. september 2003 - 21:01 #6
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?
Avatar billede mogli Nybegynder
12. september 2003 - 21:29 #7
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.
Avatar billede burningice Nybegynder
14. september 2003 - 10:08 #8
prøv at fjern de her tre sætninger:

//opret autogenererede sql sætninger
    dataAdapter.UpdateCommand = comBuilder.GetUpdateCommand();
    dataAdapter.InsertCommand = comBuilder.GetInsertCommand();
    dataAdapter.DeleteCommand = comBuilder.GetDeleteCommand();
Avatar billede mogli Nybegynder
14. september 2003 - 10:31 #9
Det var der desværre heller ikke noget held med. Den kommer med den samme fejl, som jeg har beskrevet før.
Avatar billede burningice Nybegynder
14. september 2003 - 10:42 #10
hvis du nu undlader din SqlCommandBuilder, og manuelt opretter din Update-command... det gør heller ikke nogen forskel?:
Avatar billede mogli Nybegynder
14. september 2003 - 11:23 #11
Har godt nok tænkt på det, men ivl da også lige prøve at føre tanken ud i livet. Vender lige tilbage senere med resultatet.
Avatar billede mogli Nybegynder
14. september 2003 - 14:33 #12
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.
Avatar billede burningice Nybegynder
14. september 2003 - 14:42 #13
:) hehe.. ja, jeg kan godt forestille mig at det blev en noget lang kode med alle de rows du har... kan du ikke bare bruge en Stored Procedure ?
Avatar billede mogli Nybegynder
14. september 2003 - 15:29 #14
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester