Avatar billede spottie Nybegynder
19. maj 2006 - 11:05 Der er 4 kommentarer og
1 løsning

Vedr. spørgsmål til Windows applikation og MySQL database?

Goddag Eksperter

Jeg ville høre om nogen kunne hjælpe mig med hvordan man kunne gøre sådan at når man har flere windows applikationer der så kobler op til samme database:

1) Hvordan kan man så enten med C# kode eller MySQL syntax, gøre således at flere brugere/applikationer ikke retter i de samme data i databasen på samme tid?
Håber at se lidt kode/syntax fra fiolk, der ved det.

Vh spottie
Avatar billede arne_v Ekspert
20. maj 2006 - 03:22 #1
Der er flere måder at gøre det på.

Hvis vi nu antager at det er korte tidsintervaller vi snakker d.v.s.
at flere brugere lavet noget som involverer flere SQL sætninger
og hvor det er vigtigt at de SQL sætninger ikke bliver rodet sammen men at
der ikke ventes på bruger input mellem de forskellige input, så er
transaktioner nok vejen frem.

Her er lidt kode:

            MySqlConnection con = new MySqlConnection("Database=Test;Data Source=localhost;User Id=;Password=");
            con.Open();
            MySqlTransaction tx = con.BeginTransaction(IsolationLevel.Serializable);
            MySqlCommand cmd1 = new MySqlCommand("...", con);
            cmd1.Transaction = tx;
            cmd1.ExecuteNonQuery();
            MySqlCommand cmd2 = new MySqlCommand("...", con);
            cmd2.Transaction = tx;
            cmd2.ExecuteNonQuery();
            tx.Commit();
            con.Close();
 
Husk at transaktioner i MySQL kræver brug af InnoDB tabeller.

Kalder du tx.Rollback fremfor tx.Commit så ignorerer du alle rettelserne
i transaktionen.
Avatar billede pongman Nybegynder
01. juni 2006 - 00:18 #2
Den nemmeste måde at forhindre at flere brugere retter i samme data :
(b1 henter data, b2 henter data, b1 gemmer data, b2 gemmer data og overskriver derved b1's ændringer)
er at lave et version tjek. Tilføj en 'version' column til din table og få programmet til at tjekke om den opdaterer samme version som den har hentet.

Ved ikke om dentte eksempel hjælper (det compiler ikke..har slettet lidt for at gøre det mere overskueligt)

            // Opbyg SQL-kommando
            sqlStr = "UPDATE " + TABEL + " SET ";
            sqlStr += ",Version=" + (version + 1);    Versionsnr opdateres
            sqlStr += " WHERE tlf=" + this.tlf + " AND Version = " + this.version;    // versionsnr
            cmd.CommandText = sqlStr;

            cmd.Connection = con;
            con.Open();
            NoOfRowsEffected = cmd.ExecuteNonQuery();  // Udfør kommando (SQL-streng)
            con.Close();

            if (NoOfRowsEffected == 1)        // opdateret ok
            {
                return "OK"
            }
            else
            {
                  vare slettet eller nyere version findes
            }
Avatar billede arne_v Ekspert
18. juni 2006 - 20:55 #3
kommet videre ?
Avatar billede spottie Nybegynder
19. maj 2007 - 07:43 #4
lukker
Avatar billede spottie Nybegynder
19. maj 2007 - 07:43 #5
lukker
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