[ wex-alpha @ 09.08.2011. 11:37 ] @
Zadatak je, pronaci istu string vrijednost u bazi(barcode), te uraditi update int(stanje) polja.

Baza je



Uploaded with ImageShack.us

metoda koja to radi je:

Code:

public void AzurirajKolicinu(string barcode, int kolicina)
        {
           
                SqlCeConnection con = new SqlCeConnection(@"Data Source = |DataDirectory|\intercom.sdf");

                con.Open();

                SqlCeCommand com = new SqlCeCommand("update prodaja set stanje =" + kolicina.ToString() + " WHERE barcode= " + barcode, con);
                com.Parameters.AddWithValue("@stanje", kolicina);

                com.ExecuteNonQuery();

                con.Close();



Znaci nadji barkod iz baze, i azuriraj njegovo int kolicina polje sa novom vrijednoscu.

Ovo radi ako imam barkodove koji su >= 14 karaktera (primjer: 1234567890123).


Ovo ne radi ako imam barkodove koji su <= od 13 karaktera (123456789012)
Greska koju dobijem je:

exception.message
Code:

---------------------------

---------------------------
Expression evaluation caused an overflow. [ Name of function (if known) =  ]
---------------------------
OK   
---------------------------



Malo detaljnije:
MessageBox.Show(a.InnerException + "\n" + a.Source + "\n" + a.StackTrace + "\n" + a.TargetSite);
Code:

SQL Server Compact ADO.NET Data Provider
   at System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 hr)
   at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommandText(IntPtr& pCursor, Boolean& isBaseTableCursor)
   at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, resultSetOptions options)
   at System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery()
   at POSkasa.konekcija.AzurirajKolicinu(String barcode, Int32 kolicina) in C: 


Cini mi se da negdje dolazi do kolizije tipa podataka, ali gdje?





[ Shadowed @ 09.08.2011. 12:02 ] @
OK, ovo verovatno nema veze sa tvojim problemom (nista mi u vezi toga ne pada na pamet trenutno), ali zasto dodajes parametar ako ga ne koristis nego hardcodiras kolicinu u query?
[ wex-alpha @ 09.08.2011. 12:09 ] @
To su bili pokusaji u nadi da nadjem problem...

:)
[ wex-alpha @ 09.08.2011. 13:27 ] @
Ovo nije normalno, cini mi se da jedan od fajlova koji sam koristio za testiranje na neki nacin zezne bazu.

Jos testiram...
[ sallle @ 09.08.2011. 16:31 ] @
ako vec rucno pakujes naredbu, taj barcode bi valjda trebalo da ide kao: WHERE barcode= N'" + barcode+"'"

ali i barcode bi trebalo kao parametar prosledjujes:

SqlCeCommand com = new SqlCeCommand("update prodaja set stanje =@kolicina WHERE barcode= @barcode", con);
[ Boris B. @ 09.08.2011. 19:00 ] @
Nemas navodnike kod barcode pa onda SQL pretvara taj string u int i onda overflovuje kad je preveliki. Koristi parametre i nece te boleti glava
[ wex-alpha @ 09.08.2011. 19:52 ] @
Citat:
Boris B.: Nemas navodnike kod barcode pa onda SQL pretvara taj string u int i onda overflovuje kad je preveliki. Koristi parametre i nece te boleti glava :)


Da to je bio razlog. Ali to ne objasnjava razlog zasto mi sa manjim brojevima radi overflow...

kasnije sam provalio sta je u pitanju... Fajl iz kojeg parsiram vrijednosti... jedno prokleto polje je bilo pogresno uneseno!!!
A cijelo jutro testiram sa tim fajlom. Kako sam ga sa zadovoljstvom OBRISAO!!!

Sad imam handle za sve uslove, i nema vise problema.

PS
Moram poraditi na querijima... nije mi jaca strana :)

[ wex-alpha @ 10.08.2011. 20:10 ] @
I na kraju evo koda koji napokon radi kako treba (hope) :)

Code:

SqlCeConnection con = new SqlCeConnection(@"Data Source = |DataDirectory|\intercom.sdf");
                con.Open();
                SqlCeCommand com = new SqlCeCommand("update prodaja set stanje = @kolicina WHERE barcode= @barcode", con);
                com.Parameters.AddWithValue("@kolicina", kolicina);
                com.Parameters.AddWithValue("@barcode", barcode);
                com.ExecuteNonQuery();
                con.Close();