[ AMD guy @ 11.03.2009. 19:50 ] @
Kako da izabrani datum iz DateTimePicker kontrole(Windows forms) prebacim bazu (MS SQL 2005). Koristim c# Ovo koristim kod upisa podataka sa Forme u bazu, vec imam za Username i password, treba mi jos i datum. |
[ AMD guy @ 11.03.2009. 19:50 ] @
[ Sapphire @ 11.03.2009. 22:12 ] @
Ako vec imas za Username i Password, onda pretpostavljam da se znas konektovati na bazu, kao i razmjeniti podatke sa njom (mislim, bar na jedan od nacina).
Sto se tice problema, DateTimePicker ima Value property koji sadrzi trenutno postavljeni datum kontrole, u obliku DateTime klase. Dovoljno je da datum iz te klase posaljes u bazu pomocu upita ovakvog oblika: Code: DateTime datum = tvojDateTimePicker.Value; string sqlUpit = @"INSERT INTO NekaTablaSaDatumom (Datum) VALUES ( convert(datetime, '" + datum.ToString() + "', 103) )"; Naravno, upit je mogao i ovako da izgleda: Code: string sqlUpit = @"INSERT INTO NekaTablaSaDatumom (Datum) VALUES ( convert(datetime, '" + tvojDateTimePicker.Text + "', 103) )"; convert() funkcija u Sql Serveru pretvara neku vrstu podatka u format koji ti zelis. Vezano za datum, potrebno je da kao prvi argument stavis datetime tip podatka, u drugi argument ide tvoj datum koji pretvaras (a u ovome primjeru upita, nakon pretvaranja i zapisujes u bazu); te zadnji argument je kod za oblik formata koji zelis. 103 je dd/mm/yyyy format za datum. Odi na http://msdn.microsoft.com/en-us/library/ms187928.aspx za dodatni info. Naravno, ovo je rjesenje ako koristis ad-hoc sql direktno kroz ADO.NET [ AMD guy @ 11.03.2009. 23:10 ] @
Ja sam to malo drugacije uradio
Code: private void btnNovi_Click(object sender, EventArgs e) { //Kreiranje SqlConnection objekta za povezivanje sa bazom SqlConnection Conn = new SqlConnection(Properties.Settings.Default.veleprodajaConnStr); //Uspostavljanje veze sa bazom Conn.Open(); DateTime datum = dateTimePicker1.Value; string insertString = "INSERT INTO korisnici(Username,Password,DatumRodjenja) VALUES (" + "@Username, @Password, @DatumRodjenja"+")"; //Kreiranje SqlCommand objekta za cuvanje izraza SELECT SqlCommand SqlComm = Conn.CreateCommand(); SqlComm.CommandText = insertString; SqlComm.Parameters.Add("@Username",SqlDbType.NVarChar, 20); SqlComm.Parameters.Add("@Password", SqlDbType.NVarChar, 30); SqlComm.Parameters.Add("@DatumRodjenja", SqlDbType.DateTime, 20); SqlComm.Parameters["@Username"].Value = tbNoviUser.Text; SqlComm.Parameters["@Password"].Value = tbNoviPassword.Text; SqlComm.Parameters["@DatumRodjenja"].Value = dateTimePicker1.Text; SqlComm.ExecuteNonQuery(); Conn.Close(); MessageBox.Show("Korisnik kreiran"); Close(); } A ovo je rezultat ![]() Hvala na pomoci [ Sapphire @ 11.03.2009. 23:31 ] @
Yeah, moze i sa parametrima dakako, samo moze eventualni problem biti u ovim konverzijama datuma, gdje koliko znam ne mozes iskorisiti parametre (mozda i nije tako, slobodno neka neko kaze). Jedno moguce rjesenje bi bila i stored procedura, koja u sebi ima convert funkciju...
[ sallle @ 12.03.2009. 01:49 ] @
ni jedno resenje ne valja.
moguce da ce kod vas proraditi, ali u opstem slucaju nece... textualna reprezentacija datuma je culture sensitive... cisto resenje bi bilo da u amd-ovom kodu stoji sledeci red: Code: SqlComm.Parameters["@DatumRodjenja"].Value = dateTimePicker1.Value; datetimepicker ima razlicit minvalue od datetime polja u bazi, pa nekad nije lose ni to hendlovati. ukoliko dodje do exceptiona ostace konekcija da visi , tako da bi valjalo iskoristiti try/catch ili using (sqlconnection... [ AMD guy @ 12.03.2009. 19:37 ] @
Kako bi onda radio proveru, kod kreiranja novog korisnika dali je Username vec zauzet ili ne?
Zamenio sam SqlComm.Parameters["@DatumRodjenja"].Value = dateTimePicker1.Text sa SqlComm.Parameters["@DatumRodjenja"].Value = dateTimePicker1.Value i sada mi upisuje i sistemsko vreme u tablelu [ sallle @ 13.03.2009. 00:47 ] @
moze na razne nacine. svakako treba da postavis unique index na username kolonu.
unos sa proverom mozesd a vrsis tako sto zamenis: Code: string insertString = @"if exists (select * from korisnici where username = @username) begin select -1 end else begin INSERT INTO korisnici(Username,Password,DatumRodjenja) VALUES (@Username, @Password, @DatumRodjenja) select scope_identity() end "; prilikom izvrsavanja naredbe, ne izvrsavas executenonquery() vec izvrsis executeScalar(). i ispitujes povratnu vrednost... [ AMD guy @ 18.03.2009. 19:37 ] @
Jos jedno pitanje. Kako bi prikazao korisniku da je username vec zauzet, a ako nije onda nista. Probao sam ovako, ali imam gresku "Column "usename" does not belong to table korisnici"
Code: foreach (DataRow row in myDataTable.Rows) { if (row["Username"].ToString() == tbNoviUser.Text) { MessageBox.Show("Korisnicko ime zauzeto"); } } [Ovu poruku je menjao AMD guy dana 18.03.2009. u 21:13 GMT+1] Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|