Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

[C# i SQL Server CE] There is a file sharing violation

  • 4 odgovora
  • 2.862 pregleda

Najnovija ↓

[C# i SQL Server CE] There is a file sharing violation 13.12.2009. u 16:34 · pre 205 meseci #1
Pozdrav,

Pravim C# Windows aplikacije, koje rade sa SQL Server CE bazom.

U pitanju su dve aplikacije koje rade nad istim SDF fajlom.

Prva aplikacija koristi SDF na svakih 5-6 minuta. Sve sto radi je da otvori konekciju, ocita podatke, i zatvori je. Sve radi najjednostavnije moguce:

Code:

          SqlCeConnection con = new SqlCeConnection(connectReport);
            SqlCeCommand cmd = new SqlCeCommand(sql, con);
            SqlCeDataReader reader;

            try
            {
                con.Open();
                
            }
            catch (SqlCeException sqlexception)
            {
                //Console.WriteLine(sqlexception.Message);
            }
            catch (Exception ex)
            {
                //Console.WriteLine(ex.Message);
            }
            
            
            int mySpeed = 0;
            string tmpStrMy = "";

            MyClass.contentImageList.Clear();
            try
            {
                reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    MyClass.contentImageList.Add(reader[0]);
                    tmpStrMy = tmpStrMy + reader[0].ToString() + ",";
                    mySpeed = Convert.ToInt32(reader["My_Speed"]);
                }
                reader.Close();
            }
            catch (SqlCeException sqlexception)
            {
                //Console.WriteLine(sqlexception.Message);
            }
            catch (Exception ex)
            {
                //Console.WriteLine(ex.Message);
            }

            if (con.State == ConnectionState.Open)
            {
                try
                {
                    con.Close();
                }
                catch (Exception ex) {
                    MessageBox.Show("Ne mogu da zatvorim konekciju - \n" + ex.ToString()); // ovo nikad ne javi
                }

            }




Nad istim tim sdf fajlom, na vrlo slican nacin, radi jos jedna aplikacija. Pomocu
nje radim sa podacima koji se nalaze u SDF fajlu.


Problem koji mi se javlja je da se (skoro, ili u 90% slucajeva) svaki put kada
druga aplikacija pokusa da uradi najjednostavniji SELECT, vrati gresku:

Code:

There is a file sharing violation. A different process might be using the file.


Deluje kao da prva aplikacija (ona koja koristi SDF na svakih nekoliko minuta) ili
nije zatvorila konekciju (a jeste). Ili je nesto drugo u pitanju?


Da li mozete da mi pomognete i da mi kazete gde gresim, sta nisam uradio kako treba?


Re: [C# i SQL Server CE] There is a file sharing violation 13.12.2009. u 17:02 · pre 205 meseci #2
Verovatno ti jedna od aplikacija zakljucava bazu za citanje ovoj drugoj aplikaciji.
Probaj da u konstruktor SqlCeConnection prosledis odgovarajuci connection String.
Pogledaj ovo za detalje: http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection.connectionstring%28VS.80%29.aspx.
Nadam se da ce biti od pomoci.
Re: [C# i SQL Server CE] There is a file sharing violation 13.12.2009. u 17:29 · pre 205 meseci
izmenjeno 1 put, poslednji put johnnyc 13.12.2009. u 17:40
  1. johnnyc13.12.2009. u 17:40zapis iz teksta poruke
#3
Da, moguce je da si u pravu... ali iako sam pokusao sa razlicitim vrednostima za Mode, nisam uspeo da resim problem...


Za prvu, koja pristupa na svakih nekoliko minuta, i koja radi samo read-only, postavio sam sledeci connection string:

Code:

connectReport = string.Format("Data Source='DatabaseFile.sdf';File Mode='Shared Read';Persist Security Info=False;");


Po svemu sudeci, bas ta aplikacija zakljucava bazu.


Za drugu, koja pristupa bazi za citanje i izmenu, postavio sam

Code:

connectReport = string.Format("Data Source='DatabaseFile.sdf';File Mode='Read Write';Persist Security Info=False;");



Gde gresim?

Hvala unapred na pomoci!
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme