[ johnnyc @ 13.12.2009. 15:34 ] @
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?


[ marko_81 @ 13.12.2009. 16:02 ] @
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.
[ johnnyc @ 13.12.2009. 16:29 ] @
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!

[Ovu poruku je menjao johnnyc dana 13.12.2009. u 17:40 GMT+1]
[ marko_81 @ 13.12.2009. 16:50 ] @
Koliko sam nasao na netu File Mode=Shared Read dozvoljava citanje baze drugim procesima ali ne i modifikovanje (http://www.connectionstrings.com/sql-server-2005-ce).
Jesi probao da stavis za prvu: File Mode=Read Only a drugu da ostavis kakva jeste?
[ johnnyc @ 13.12.2009. 17:34 ] @
Marko pozdrav,

resili smo ga, postavio sam File Mode=Shared Read za drugu i sada radi ok... ili bar deluje da je ok
:-)


hvala ti!