Ne uspije doći do ExecuteQueryja, izgleda da ga ove liste hebu. Sada sam išao ponovno i jedna nije popunjena uopće. Mislim da znam di je problem, postat ću rješenje.
C# - Problemi i rješenja
- poruka: 2.151
- |
- čitano: 705.035
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Poslušaj Fridaya i kreni koristiti EF ili L2S. Preporodit ćeš se. EF je moja preporuka. Ali ako želiš kucati ADO.NET kôd, samo naprjed. :D
Sad sam na 2 projekta pa nemam vremena detaljnije poučavati EF. Kad završim, nema novih poslova dok to ne pohvatam.
A što se tiče ovog gore problema, Google API nije punio liste kako treba. Sad sve radi (relativno) ok.
Sad sve radi (relativno) ok.
Relativno?
Ma ovaj Google API me pojede živog. Ne vraća adrese i URLove od kontakata kako treba. Dokumentacija je ili štura ili se ja nisam snašao. Problem je riješen jednim ogromnim try...catch blokom koji u slučaju exceptiona to polje (adresa ili url) popuni sa "" iako kada gledam na Gmailu taj kontakt ima adresu. Za neke vrati kako treba a za neke jednostavno neće.
Može preporuka neke dobre knjige za C#? :-)
Može preporuka neke dobre knjige za C#? :-)
Iako nisam .NET developer, svojedobno dok sam bio zainteresiran za .NET, posebno mi je za oko zapala knjiga Luke Abrusa, uglavnom knjiga se zove Simfonija programiranja u .NET-u, nastala je pod otkriljem i palicom ekipe iz Buga, i kod istih je dobavljiva u fizičko obliku. Svojedobno sam zbog te knjige okrenuo par knjižnica, maltretirao tetu Vesnu iz BUG redakcije i samog Luku. UGlavnom, moja preporuka, knjiga na dosta lijep način uvodi novog korisnika/developera u .NET svijet, od web formi, servisa, ASP.NET, WPF-a, samog .NET frameworka, kao i same fundamente programiranja, petlje, varijable, namespaces, objekte, klase i to početni primjeri pisani i u C# i VB.NET-u, dok se kasnije sve orijentira na C#.
Bok! Zanimalo bi me kako da napravim Parsing jednog commandLine koje napišem na console aplikaciji u C#. Znaci trebala bi taj commandline podjelit i sejvat u posebne String value, da ih mogu koristit u pozivu druge procedure.
Moja console aplikacija bi trebala napisat početnu line "napiši postavke koje želiš" ja napišem "postavke 1 - to, 2-to ... itd." i trebala bi svaki "to" sejvat u String value. Nadam se da sam bila jasna. Trebala bi bit neka glupost ali nikako da proradi, jer kad napravim tako ispadne mi da String[] args je prazan, uopce mi ne pročita podatke koje sam napisala.
Hvala vam puno!
Iako nisam .NET developer, svojedobno dok sam bio zainteresiran za .NET, posebno mi je za oko zapala knjiga Luke Abrusa, uglavnom knjiga se zove Simfonija programiranja u .NET-u, nastala je pod otkriljem i palicom ekipe iz Buga, i kod istih je dobavljiva u fizičko obliku. Svojedobno sam zbog te knjige okrenuo par knjižnica, maltretirao tetu Vesnu iz BUG redakcije i samog Luku. UGlavnom, moja preporuka, knjiga na dosta lijep način uvodi novog korisnika/developera u .NET svijet, od web formi, servisa, ASP.NET, WPF-a, samog .NET frameworka, kao i same fundamente programiranja, petlje, varijable, namespaces, objekte, klase i to početni primjeri pisani i u C# i VB.NET-u, dok se kasnije sve orijentira na C#.
I Domagoja Pavlešića. :D Odlična knjiga, ja sam je tražio dugo, pa sam odustao pa je opet tražim, sumnjam da ću je naći. Bum gnjavil Domagoja. :P
Autoru preporučujem Wrox - Beginning C# 2010. Ili, stara knjiga od Charlesa Petzolda, ne znam kako se točno zove ("intro in .NET" ili tako nešto...), ali je odlična.
Bok! Zanimalo bi me kako da napravim Parsing jednog commandLine koje napišem na console aplikaciji u C#. Znaci trebala bi taj commandline podjelit i sejvat u posebne String value, da ih mogu koristit u pozivu druge procedure.
Moja console aplikacija bi trebala napisat početnu line "napiši postavke koje želiš" ja napišem "postavke 1 - to, 2-to ... itd." i trebala bi svaki "to" sejvat u String value. Nadam se da sam bila jasna. Trebala bi bit neka glupost ali nikako da proradi, jer kad napravim tako ispadne mi da String[] args je prazan, uopce mi ne pročita podatke koje sam napisala.
Hvala vam puno!
Ovo je vrlo zbrčkano objašnjeno. Daj nekakav banalan primjer jer ovo što si napisala nema baš nekog smisla...
Ako sam ja dobro skužio, treba joj neka for petlja koja će pohvatati te "postavke" i spremiti ih kao List<String>. Nakon završetka upisa tih varijabli, program bi trebao krenuti dalje...
String[]args se popuni samo ako se aplikaciji zadaju parametri npr. chkdsk C: /f - parametri bi bili C: i f
String[] args je prazan
A kakav bi trebao biti? Pozivaš li aplikaciju iz komandnog retka?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Answer1
{
class Program
{
static void Main(string[] args)
{
if (args.Length != 0)//Ukoliko se postavke unesu preko komandne linije
{
foreach (var item in args)
{
Console.WriteLine(item.ToString());
}
return;
}
Console.WriteLine("napiši postavke koje želiš :");//npr. postavka jedan,postavka dva,postavka tri,postavka ...
string postavke = Console.ReadLine();
string[] polje_postavki = postavke.Split(',');//Odvoji postavke na mjestu gdje je zarez i spremi ih u polje postavki
foreach (var item in polje_postavki)
{
Console.WriteLine(item.ToString());
}
return;
}
}
}
Koje je po vama najlakše rješenje za provjeru je li aplikacija zatvorena na normalan način?
Dakle, ako nešto "nasilno" prekine aplikaciju, ja bi to mora znati. Aplikacija na idućem pokretanju mora pokazazi upozorenje da prošli put nije ugašena na pravilan način - preko posebnog gumba.
Jedan od načina je spremiti ključ u registry na gašenju. Ako ključa nema, aplikacija nije ugašena kako treba. Ako je ključ tu, aplikacija vrati cleanExit = 1 i obriše ključ tijekom pokretanja. Na zatvaranju, zapisuje ključ opet.
Ima nešto jednostavnije ili je to to?
[edit] - aplikacija generira i neke tmp fajlove ({guid}.tmp) koje ostavlja ili briše - ovisno o tome što se radilo. E sada, postoji mogućnost da se ti fajlovi pobrišu ručno preko serverskog dijela pa njihova prisutnost ne znači ništa - ne zna se jel aplikacija ugašena "nasilno" pa su fajlovi ostali ali ih je server pobrisao.
Aplikacija ne zapisuje u registry ništa - sve drži u XML fajlovima (opet, da bi server mogao čitati i mijenjati njihov sadržaj). Ako postoji neki drugi način, htio bi izbjeći piskaranje po registiyu bez previše potrebe.
Koje je po vama najlakše rješenje za provjeru je li aplikacija zatvorena na normalan način?
Dakle, ako nešto "nasilno" prekine aplikaciju, ja bi to mora znati. Aplikacija na idućem pokretanju mora pokazazi upozorenje da prošli put nije ugašena na pravilan način - preko posebnog gumba.
Jedan od načina je spremiti ključ u registry na gašenju. Ako ključa nema, aplikacija nije ugašena kako treba. Ako je ključ tu, aplikacija vrati cleanExit = 1 i obriše ključ tijekom pokretanja. Na zatvaranju, zapisuje ključ opet.
Ima nešto jednostavnije ili je to to?
[edit] - aplikacija generira i neke tmp fajlove ({guid}.tmp) koje ostavlja ili briše - ovisno o tome što se radilo. E sada, postoji mogućnost da se ti fajlovi pobrišu ručno preko serverskog dijela pa njihova prisutnost ne znači ništa - ne zna se jel aplikacija ugašena "nasilno" pa su fajlovi ostali ali ih je server pobrisao.
Aplikacija može koristiti običnu log datoteku u kojoj može jednostavno zapisati npr. broj 0 kad aplikacija krene s radom i broj 1 prilikom završavanja. Ti pri sljedećem pokretanju samo provjeriš da li je zadnji unos u log datoteku bio 0 ili 1.
Inače se ovo rješava vrlo elegantno kada je riječ o više procesa. Prvi proces pozove drugi proces i čeka ga da završi s radom, a nakon toga analizira njegovu povratnu vrijednost tj. exit code.
Inače se ovo rješava vrlo elegantno kada je riječ o više procesa. Prvi proces pozove drugi proces i čeka ga da završi s radom, a nakon toga analizira njegovu povratnu vrijednost tj. exit code.
Da ali što ako oba procesa nešto prekine? Npr, netko odlogira usera? Malo vjerojatna situacija ali nije nemoguće.
Što se tiče ovog sa log fajlom, tako nešto sam i planirao napraviti. Hvala.
Jedno pitanje
Kako syncati npr. 3 backgroundWorkera?
Ta 3 workera rade SELECT na nekoliko SQL tablica i u jednoj Access bazi. Select se vrti na osnovu promjene textboxa tj. radi google-like search - čim dopišete novo slovo, on ponovno pokreće pretragu i fila dataGrid. E sada, to je poprilično sporo, pogtovo select u Access bazi od 100tinjak MB - treba mu skoro 2 sekunde.
Ako korisnik prebrzo utipka naziv, proces (thread - backgroundWorker) se skrši jer nije gotov sa izvršavanjem starog querya. Palo mi je na pamet disableati search textbox dok ne završi sa izvršavanjem querya i kada sva 3 workera budu imali spremne podatke tek onda enableati searchbox i dozvoliti daljnji upis.
Ukratko - kako sinkronizirati 3 threada tako da najbrži ne vraća RunWorkerComplete sve dok zadnji ne bude gotov?
Jedno pitanje
Kako syncati npr. 3 backgroundWorkera?
Ta 3 workera rade SELECT na nekoliko SQL tablica i u jednoj Access bazi. Select se vrti na osnovu promjene textboxa tj. radi google-like search - čim dopišete novo slovo, on ponovno pokreće pretragu i fila dataGrid. E sada, to je poprilično sporo, pogtovo select u Access bazi od 100tinjak MB - treba mu skoro 2 sekunde.
Ako korisnik prebrzo utipka naziv, proces (thread - backgroundWorker) se skrši jer nije gotov sa izvršavanjem starog querya. Palo mi je na pamet disableati search textbox dok ne završi sa izvršavanjem querya i kada sva 3 workera budu imali spremne podatke tek onda enableati searchbox i dozvoliti daljnji upis.
Ukratko - kako sinkronizirati 3 threada tako da najbrži ne vraća RunWorkerComplete sve dok zadnji ne bude gotov?
Bolje onda napravi sa Task klasama i nakon što si sva 3 taska upogonio pozovi wait na sva 3:
t1.wait();
t2.Wait();
t3.Wait();
kod će se dalje izvršavati tek kad su sva 3 gotova.
Framework 4.0?
Ima neko drugo rješenje a da je za 3.5? Ovo rješenje je ok ali ciljani framework je 3.5.
Framework 4.0?
Ima neko drugo rješenje a da je za 3.5? Ovo rješenje je ok ali ciljani framework je 3.5.
Sorry, nisam znao. Onda provjeravaj statuse ostala 2 BW-a kad pojedini završi. Ako su druga 2 gotova "opali" neki svoj event/metodu. Vrlo jednostavno. Ili si napravi neki int property koji ćeš dizati za 1 za svaki complete. U set metodi tog property-ja svaki puta provjeri jel mu trenutna vrijednost 3 - ako je izvrši ono što trebaš.
EDIT: nemoj ni slučajno izvršavati "teške" query-je za svako slovo, NI SLUČAJNO!!!
Nešto ću iskemijati sa ovim gore - kada worker završi, dignut će neki int za +1 a neki "monitor" će u do..while petlji paziti jel dozvoljeno ponovno pokretanje workera.
Problem je u tome što su mi takvi queryji potrebni jer pretražuje kontakte i podatke o kontaktima. Access baza je problem. Ona se updatea preko drugog programa svakih x sekundi nad čime ja nemam kontrolu a moj program mora pretraživati tu bazu. Parcijalno pretraživanje je bitno u cijeloj priči.
Da se ova access baza ne mijenja svakih par minuta ili manje, jednostavno bi na loadanju search forme sve kopirao u privremenu sqlite tablicu i nju pretraživao do zatvaranja forme. Pretraživanje bi bilo puno prije gotovo (jer worker koji traži po glavnoj SQL bazi uopće nema problema sa pretraživanjem slovo-po-slovo a ima daleko više kontakata nego access) nego ovo roštanje po Accessu.
I to na mrežnom disku -.-
Nešto ću iskemijati sa ovim gore - kada worker završi, dignut će neki int za +1 a neki "monitor" će u do..while petlji paziti jel dozvoljeno ponovno pokretanje workera.
Problem je u tome što su mi takvi queryji potrebni jer pretražuje kontakte i podatke o kontaktima. Access baza je problem. Ona se updatea preko drugog programa svakih x sekundi nad čime ja nemam kontrolu a moj program mora pretraživati tu bazu. Parcijalno pretraživanje je bitno u cijeloj priči.
Da se ova access baza ne mijenja svakih par minuta ili manje, jednostavno bi na loadanju search forme sve kopirao u privremenu sqlite tablicu i nju pretraživao do zatvaranja forme. Pretraživanje bi bilo puno prije gotovo (jer worker koji traži po glavnoj SQL bazi uopće nema problema sa pretraživanjem slovo-po-slovo a ima daleko više kontakata nego access) nego ovo roštanje po Accessu.
I to na mrežnom disku -.-
do... while bi ti mogao zakucati procesor na 100% (ili barem jezgru na kojoj se izvršava). Bolje onda stavi neki timer koji ćeš paliti/gasiti a koji će nakon svakih n milisekundi provjeravati jel se smije raditi što već treba.
Vjeruj mi da ima korisnika koji će u te dvije sekunde već napraviti print screen i poslati mail u kojem piše "ZAŠTO MENI NE RADI PRETRAGA???"
Vjeruj mi da ima korisnika koji će u te dvije sekunde već napraviti print screen i poslati mail u kojem piše "ZAŠTO MENI NE RADI PRETRAGA???"
Srića da su moji korisnici strpljivi i redovito po principu googla udaraju enter nakon tipkanja pa taman ispadne da se pojavu rezultati nakon udara na enter, za sada nisam imao problema a uvijek se da skratit za pola sekunde :)
Srića da su moji korisnici strpljivi i redovito po principu googla udaraju enter nakon tipkanja pa taman ispadne da se pojavu rezultati nakon udara na enter, za sada nisam imao problema a uvijek se da skratit za pola sekunde :)
To je oksimoron! Nema strpljivih korisnika...
Jel netko radio sa google APIjem za .net?
Imam problema sa adresama i telefonskim brojevima. Ne vidim način kako ih dohvatiti. Sve drugo ok ali to dvoje ne ide. Npr:
foreach (Street street_adr in e.PrimaryPostalAddress.Street)
{
strt_addr.Add(street_adr.ToString());
}
ne prolazi. Dobijem praznu listu a morao bit dobiti adresu. Kontakt ima sve upisano na gmailu ali dobiti to, nema teorije.
Jel netko radio sa google APIjem za .net?
Imam problema sa adresama i telefonskim brojevima. Ne vidim način kako ih dohvatiti. Sve drugo ok ali to dvoje ne ide. Npr:
foreach (Street street_adr in e.PrimaryPostalAddress.Street)
{
strt_addr.Add(street_adr.ToString());
}
ne prolazi. Dobijem praznu listu a morao bit dobiti adresu. Kontakt ima sve upisano na gmailu ali dobiti to, nema teorije.
A šta je konkretno prazno?
e?
e.PrimaryPostalAddress?
e.PrimaryPostalAddress.Street?
Ili strt_addr?