C# in MSSQL Datetime

Pozdravljeni!

Uporabljam VS2005 z SQL 2000 Serverjem. Programiram pa v Asp.net z C#.

Imam sledeč problem. Vnos datuma v SQL bazo.

V texbox-u vnesem datum v fromatu dd.mm.llll. Ko hočem vnesti ta datum v bazo mi javi error, češ da ni pravi format.

koda:

string InsertCmd = "insert into table (veljavnost) values('" + textbox1.text + "')";

Probal sem tudi z textbox1.text.ToString("DD.MM.YYYY") <- tu pa seveda mi je javil napako

Kakšna je še drugačna rešitev?

 

Hvala Vam za odgovor.

 

lp

Matijaž 

Avtor: matijaz, objavljeno na portalu SloDug.si (Arhiv)

Leave a comment

Please note that we won't show your email to others, or use it for sending unwanted emails. We will only use it to render your Gravatar image and to validate you as a real person.

pril
pril - ponedeljek, 23. april 2007

Mene tudi - Markič je itak legenda Tako se začnejo dobre diskusije...lp, pl

spirit1
spirit1 - ponedeljek, 23. april 2007

Miha, me prav zanima tvoja replika v tem primeru

pril
pril - ponedeljek, 23. april 2007

MihaM: pril: Stored procedures can be individually secured within the database. A client can be granted permissions to execute a stored procedure without having any permissions on the underlying tables.Če ima&scaron; bazo namenjeno samo za web server, čemu dodaten security (auditing in ostalo je sploh bolje če je izključeno - lepo pri&scaron;para&scaron; na performancah)Se ti malo heca&scaron;, a?nope... lp, pl

MihaM
MihaM - ponedeljek, 23. april 2007

pril: Stored procedures can be individually secured within the database. A client can be granted permissions to execute a stored procedure without having any permissions on the underlying tables.Če ima&scaron; bazo namenjeno samo za web server, čemu dodaten security (auditing in ostalo je sploh bolje če je izključeno - lepo pri&scaron;para&scaron; na performancah)Se ti malo heca&scaron;, a?

pril
pril - ponedeljek, 23. april 2007

Ja, se strinjam - iis naj nima dbo pravic - to je pomebno! Že kar na začetku razvoja delaj z drugim userjem.Audit (pri meni) ni&nbsp;preveč zaželjen (potem ima&scaron; lahko &scaron;e posebej performance tuning za sam audit :-)&nbsp; Pri meni načelno do baze dostopa dbadministrator/razvijalec in aplikacija - za to dvoje pa ne vem če je potreben audit - ampak, kot že rečeno: odvisno od zahtev. Sam razvoj (lep&scaron;i debug in intellisense,..) mi je osebno&nbsp;bolj pri srcu&nbsp;za .net kodo kot za procedure (čeprav je sedaj isto, na 2005, lahko procedure dela&scaron; v .net kodi), compajl in deploj imam potem vedno narejen na en klik. Podalj&scaron;ano bussines logiko&nbsp;raje ponujam z web servisi, se mi zdijo bolj univerzalni, lažje dostopni in&nbsp;tudi imam občutek&nbsp;da se da naredit več...&nbsp;no, več kot očitno je da&nbsp;stvar ni eksaktna, na&nbsp;koncu&nbsp;mogoče vse&nbsp;bolj kroji lastna filozofija in osebni pogled na stvar.V&scaron;eč so mi&nbsp;debate, kjer sodelujete ljudje, ki precej veste&nbsp;o stvari (se mi zdi da je to eden redkih takih forumov v slo) tako, da se vsi nekaj naučimo Lp vsem,Primož&nbsp;&nbsp;&nbsp;

petar.repac
petar.repac - ponedeljek, 23. april 2007

&gt;Ja, saj - mogoče &scaron;e moj komentar na tole - pa mi bo mogoče &scaron;e kdo kaj povedal, da si obnovim znanje o bazah &gt;&gt;&nbsp;&nbsp;&nbsp; * Stored procedures generally result in improved performance because the database can optimize the data access plan used by the procedure and cache it for subsequent reuse.&gt;&gt;Pri navadnem insertu ni execution plana - vsaj jaz ga ne vidim takega, ki bi kaj koristil - paravzaprav ga baza pri več insertih sploh neha delat, (tako kot pri alter, nekaterih trigerjih ga niti ne naredi ipd). Prav tako velja za enostavne parametrizirane sql stavke, za katerega ne dela&scaron; ročnega execution plana - ko se prvič izvede se itak kompajliran sql stavek, skupaj z execution planom spravi v cache na bazi) - za ostalo naj se seveda nujno uporablja sproce.1. Baza sproc kompilira, torej si lahko določene zadeve pripravi vnaprej, npr. izvajalni plan. Tega drugače baza mora izračunati ko prvič dobi sql stavek (če delamo z parametri lahko ta plan potem ke&scaron;ira in uporabi večkrat).&gt;&nbsp;&nbsp;&nbsp; * Stored procedures can be individually secured within the database. A client can be granted permissions to execute a stored procedure without having any permissions on the underlying tables.&gt;&gt;Če ima&scaron; bazo namenjeno samo za web server, čemu dodaten security (auditing in ostalo je sploh bolje če je izključeno - lepo pri&scaron;para&scaron; na performancah)2. Če&nbsp; sam razvija&scaron; sistem mogoče ima&scaron; dober nadzor nad tem kateri so inserti nad bazo in kaj delajo. Pri večjih projektih pa mogoče oseba, ki razvija načrt baze ne razvija tudi srednjega/UI nivoja. Pogosto je zaželeno da se že na nivoju baze omejimo kaj na&scaron; design baze ponuja kot API navzven. Tako lahko implementira&scaron; tudi določen del poslovne logike.3.&nbsp; Recimo da iz ASP.NET aplikacije dostopa&scaron; do baze preko dbo uporabnika. Če nekdo udre v IIS bo zlahka pri&scaron;el tudi do baze in to z dbo pravicami. To pomeni da lahko prebere vse, dropa tabele, ali pa huj&scaron;e, spreminja po volji. Vdor v bazo je precej huj&scaron;a zadeva kot vdor v IIS.&gt;&nbsp;&nbsp;&nbsp; * Stored procedures result in easier maintenance because it is generally easier to modify a stored procedure than it is to change a hard-coded SQL statement within a deployed component.&gt;&gt;Ko popravlja&scaron; funkcionalnosti mora&scaron; potem oboje popravljat - source in bazo, da bi pri&scaron;el skozi samo z popravljanjem procedure pomeni da je funkcionalnost napačna pri vrsti podatka (pa &scaron;e to ne po tipu) , kar je zelo redko - ali pa imam jaz poseben način programiranja :-) , torej mora&scaron; v večini primerov popravljati na dveh mestih namesto na enem&gt;4. Če ima&scaron; SQL stavke napisane v stored procedurah in se ugotovi da ti niso optimalno napisani, ali pa v produkciji dodamo določene indekse na tabele in posledično postane SELECT neoptimalno napisan je dovolj popraviti samo sproc. Drugače mora&scaron; popraviti kodo, narediti build, deployati, ...5. Če sql stavke pi&scaron;e&scaron; v sproc ti jih baza avtomatično preveri. V kodi lahko napi&scaron;e&scaron; karkoli...&gt; &gt;&gt;&nbsp;&nbsp;&nbsp; * Stored procedures add an extra level of abstraction from the underlying database schema. The client of the stored procedure is isolated from the implementation details of the stored procedure and from the underlying schema.&gt;&gt;Do kje gre ta logika? Načelno bi lahko tudi html output gradil kar s sproci, ne? Meni je bolj v&scaron;eč filozofija, da se baza ukvarja s podatki, ostalo obdelavo naj prevzame komponenta (sploh če ima&scaron; 3-tear aplikacije, ta nivo abstrakcije prevzame bussines layer, html npr pa presentation layer, db pa data layer )6. Po mojem mnenju je bolje če baza ponuja definiran API srednjemu nivoju. Drugače je data access layer samo podalj&scaron;ek baze. Ne zdi mi se dobro z stali&scaron;ča arhitekture.&gt;&gt;&nbsp;&nbsp;&nbsp; * Stored procedures can reduce network traffic, because SQL statements can be executed in batches rather than sending multiple requests from the client.&gt;&gt;Več web strani težko spravi&scaron; v batch :-) (pazi - če se da, seveda za vsako stran zahteva&scaron; po največ en db query, in &scaron;e to samo za podatke, ki jih potrebuje&scaron;, ne npr cele tabele, za ostalo pa naj se uporabi cache že na web serverju, to potem resnično zmanj&scaron;a promet do baze, sploh če je remote.)&gt;&gt;Vedno večkrat in pri različnih tehnologijah, se mi zdi, da m$ forsira neko uporabo ne samo zato, da bi bilo tako v resnici bolje, temveč tudi zato, ker je potem (delno) onemogočena uporaba drugih konkurenčnih tehnologij v drugih okoljih/orodjih (očitni primeri: smart navigation, paging ipd... ma, cel kup je tega)&nbsp; Saj ne da bi imej kaj proti m$ - to je moje glavno okolje, vendar tudi čisto razumem da je treba živet in da živimo v profitabilnem okolju - to je tudi razlog, da je potrebno stvari vzeti z razmislekom.&gt;&gt;Bom rekel &scaron;e (mislim da pečenkove besede): mogoče se pa tudi motim...&gt;&gt;lp, pl.7. Kar se&nbsp; tega tiče lahko povem da Oracle bolj poznam kot Sql Server in napisano velja tudi tam. Drugače se strinjam s tem da MS včasih kr forsira svoje produkte, tako da razvojna orodja preveč prilagodi svojim produktom/filozofiji.LP, Petar

spirit1
spirit1 - ponedeljek, 23. april 2007

naceloma se strinjam s tem kar si rekel razen:&gt; Če ima&scaron; bazo namenjeno samo za web server, čemu dodaten security (auditing in ostalo je sploh bolje če je izključeno - lepo pri&scaron;para&scaron; na performancah)to je res, vendar takoj ko imas nek logon nekje v aplikaciji je auditing potreben. da ne omenjam da je recimo v ameriki zakon o auditingu, ki ga zahteva in se bo pocasi znasel tudi pri nas.&gt; Ko popravlja&scaron; funkcionalnosti mora&scaron; potem oboje popravljat - source in bazo, da bi pri&scaron;el skozi samo z popravljanjem procedure pomeni da je funkcionalnost napačna pri vrsti podatka...tale del si narobe razlagas. Tukaj je misljeno ce se recimo spremeni biznis zahteva vrnnjeni resultset pa ostane isti. je veliko lazje popravit sproc kot pa znova skompajlat in deployat kodo.Stored procedure so dobre tudi kot se en del Business&nbsp;Layer-ja. Nekatere stvari je pac bolje, da jih opravlja server nekatere pa client. ne pravim pa da je treba zdej vse tlacit v sproce.&nbsp;no MS forsira best practice za njegov izdelek kar je tudi prav.seveda je treba poudarit, da so za simpl stvari kot so navadni web page-i, ki samo prikazujejo stvari in ne zahtevajo ne vem kake hude biznis logike stored procedure overkill, gledano cisto iz hitrosti razvoja.vendar z vsemi ze obstojecimi CRUD generatorji je tudi ta argument malce slab. in pa nikoli ne ves kdaj bo aplikacija zrastla v nekaj vec. bolje biti pripravljen.&nbsp;

pril
pril - ponedeljek, 23. april 2007

Ja, saj -&nbsp;mogoče &scaron;e moj komentar na tole - pa mi bo mogoče &scaron;e kdo kaj povedal, da si obnovim znanje o bazah Stored procedures generally result in improved performance because the database can optimize the data access plan used by the procedure and cache it for subsequent reuse.Pri navadnem insertu ni execution plana - vsaj jaz ga ne vidim takega, ki bi kaj koristil - paravzaprav ga baza pri več&nbsp;insertih&nbsp;sploh neha delat, (tako kot pri alter, nekaterih trigerjih ga niti ne naredi ipd). Prav tako velja&nbsp;za enostavne parametrizirane sql stavke, za katerega ne dela&scaron; ročnega execution plana - ko se prvič izvede se itak kompajliran sql stavek, skupaj z execution planom spravi v cache na bazi) - za ostalo naj se seveda nujno uporablja sproce.Stored procedures can be individually secured within the database. A client can be granted permissions to execute a stored procedure without having any permissions on the underlying tables.Če ima&scaron; bazo namenjeno samo za web server, čemu dodaten security (auditing in ostalo je sploh bolje če je izključeno - lepo pri&scaron;para&scaron; na performancah)Stored procedures result in easier maintenance because it is generally easier to modify a stored procedure than it is to change a hard-coded SQL statement within a deployed component.Ko popravlja&scaron; funkcionalnosti mora&scaron; potem oboje popravljat - source in bazo, da bi pri&scaron;el skozi samo z popravljanjem procedure pomeni da je funkcionalnost napačna pri vrsti podatka (pa &scaron;e to ne po tipu) , kar je zelo redko - ali pa imam jaz poseben način programiranja :-) , torej mora&scaron; v večini primerov popravljati na dveh mestih namesto na enemStored procedures add an extra level of abstraction from the underlying database schema. The client of the stored procedure is isolated from the implementation details of the stored procedure and from the underlying schema.Do kje gre ta logika? Načelno bi lahko tudi html output gradil kar s sproci, ne? Meni je bolj v&scaron;eč filozofija, da se baza ukvarja s podatki, ostalo obdelavo naj prevzame komponenta (sploh če ima&scaron; 3-tear aplikacije, ta nivo abstrakcije prevzame bussines layer, html npr pa presentation layer, db pa data layer )Stored procedures can reduce network traffic, because SQL statements can be executed in batches rather than sending multiple requests from the client.Več web strani težko spravi&scaron; v batch :-) (pazi&nbsp;- če se da, seveda za vsako stran zahteva&scaron; po največ en db query, in &scaron;e to samo za podatke, ki jih potrebuje&scaron;, ne npr cele tabele, za ostalo pa&nbsp;naj se&nbsp;uporabi cache že na web serverju, to potem resnično zmanj&scaron;a promet do baze, sploh če je remote.)Vedno večkrat in pri različnih tehnologijah, se mi zdi, da m$ forsira neko uporabo ne samo zato, da bi bilo tako v resnici bolje, temveč tudi zato, ker je potem (delno) onemogočena uporaba drugih konkurenčnih tehnologij v drugih okoljih/orodjih (očitni primeri: smart navigation,&nbsp;paging ipd... ma, cel kup je tega)&nbsp;&nbsp;Saj ne da bi imej kaj proti m$ - to je moje glavno okolje,&nbsp;vendar tudi čisto razumem da je treba živet in da živimo v profitabilnem okolju&nbsp;-&nbsp;to je tudi razlog, da je potrebno stvari vzeti z razmislekom. Bom&nbsp;rekel &scaron;e&nbsp;(mislim da pečenkove besede): mogoče se pa tudi motim...lp, pl.

petar.repac
petar.repac - ponedeljek, 23. april 2007

Iz .NET Data Access Architecture Guide:You should use stored procedures instead of embedded SQL statements for a number of reasons: Stored procedures generally result in improved performance because the database can optimize the data access plan used by the procedure and cache it for subsequent reuse.Stored procedures can be individually secured within the database. A client can be granted permissions to execute a stored procedure without having any permissions on the underlying tables.Stored procedures result in easier maintenance because it is generally easier to modify a stored procedure than it is to change a hard-coded SQL statement within a deployed component.Stored procedures add an extra level of abstraction from the underlying database schema. The client of the stored procedure is isolated from the implementation details of the stored procedure and from the underlying schema.Stored procedures can reduce network traffic, because SQL statements can be executed in batches rather than sending multiple requests from the client.Dodal bi &scaron;e to: vedno, vedno, vedno dostopaj do baze preko parametrov (tudi če dinamično konstruira&scaron; SQL stavek se dajo programsko manipulirati tudi parametri).Vsaj dva razloga sta:1. varnost (če uporablja&scaron; parametre se za&scaron;čiti&scaron; proti SQL injection-u) in2. performance (če uporablja&scaron; parametre dovoli&scaron; bazi da uporabi že izračunan execution plan, če uporablja&scaron; dostop preko parametrov se SQL stavki pogosto razlikujejo samo v vrednosti parametrov sami stavki so identični) lp, P.&nbsp;

pril
pril - ponedeljek, 23. april 2007

Meni sproci niso v&scaron;eč, ker moram potem na dveh mestih popravljat ko nekaj spremenim.. pa se ne bi čisto strinjal da so vedno potrebni -&nbsp;pri običajnem insert stavku se mi zdi, da procedura res ni potrebna (tudi za auditing - če je to web server in ne za splo&scaron;ne namene je to sam cokla, itak je sam en user) Tole ni&nbsp;mi&scaron;ljeno kot kritika, bolj kot predlog in kot je že rečeno -&nbsp;mnenja so različna, mogoče pa&nbsp;ne poznam zadeve tako dobro kot sogovorniki...Hehehe, tole sem pa že pozabil kako zgledajo tile parametri - to pa priporočam tudi tebi (vsaj pri meni se je obneslo): naredi&scaron; si objekte za dostop do baze in izvajanje sql stavkov,&nbsp;ki znajo&nbsp;sami sestavit in sparametrizirat sql stavke (jest sem se &scaron;e malo bolj pomatral pa se &scaron;e testirajo najbolj optimalni&nbsp;načini za&nbsp;update/insert/delete metode, delajo&nbsp;enako na različnih bazah, oracle, mssql, mysql, access,. in druge metode) pa jih potem sploh ne uporablja&scaron; več: vse kar&nbsp;te zanima&nbsp;je da da&scaron; notri podatek, al pa da ga dobi&scaron; ven, vse ostalo ti postane odveč -&nbsp;razvoj pa je bistveno hitrej&scaron;i&nbsp;(ali je to transakcija, sql command, fill dataset ali reader,&nbsp;incalizacija&nbsp;ali pa karkoli - naj se stvari same zadaj po&scaron;timajo). Čez leto ali dve potem&nbsp;pozabi&scaron; kako je to sploh treba uporabljat lp, pl

AndrejT
AndrejT - ponedeljek, 23. april 2007

Sproci&nbsp;so lahko odveč le v primeru, da se ti jih ne da pisat ali pa nima&scaron; dovolj znanja zanje, poleg je &scaron;e njih vzdrževanje. Ne glede na to, ali uporabi&scaron; sproce ali sql stavke, so parametri the way to go. Zgornji stavek bi torej lahko izgledal kot:string InsertCmd = &quot;insert into table (veljavnost) values(@veljavnost)&quot;;Nekje spodaj, preden zadevo izvr&scaron;i&scaron; (kakorkoli že), pa bi se zna&scaron;lo nekaj temu podobnega:insertCommand.Parameters.AddWithValue(&quot;@veljavnost&quot;, DateTime.Parse(textBox1.Text));... pri čemer je insertCommand tipa SqlCommand. Zraven pazi&scaron;, da je datum v textBox1 res v pravi obliki (svetujem uporabo DateTime.TryParse namesto metode zgoraj, oz. neko&nbsp;podobno vrsto validacije, mogoče že z ustreznim validacijskim kontrolnikom).Seveda lahko stvari zapelje&scaron; čisto drugam, če uporablja&scaron; druge mehanizme za delo z bazo (binding, DataSeti, itd).

spirit1
spirit1 - ponedeljek, 23. april 2007

no prav naj mu bo osebno nikoli ne uporabljam sintakse insert into .. values...&nbsp;&nbsp; mi je neljuba vedno uporabljam insert into ... select...pri obeh pa&nbsp;lahko uporabis parameter.

pril
pril - nedelja, 22. april 2007

ja, seveda, sproc je seveda koristna zadeva, včasih pa povsem odveč, odvisno od primera do primera.Jasno, da datetime nima veze z kulturo sql serverja, vendar če ga daje v string za insert v obliki stringa naj bo v kulturi baze, če ne ne bo delovalo.. kot je napisal.Se strinjam, najbolj simpl je parameter, jasno, nič onegavljenja lp, pl

spirit1
spirit1 - nedelja, 22. april 2007

to je cel point parametrov. da ti ni treba delat datetime.ToString()ker ze imas datetime objekt in ga das naprej datetime objektu.se znebis celotne odisejade z stringi in datetime-i.&nbsp;tudi za insert je sproc dober. recimo auditing je najbolje da se implementira v sprocu in ne v trigerjih.&nbsp;locale od serverja je defaultno nastavljen na locale od operacijskega sistema na katerega instaliras.in pa nima nobene veze z date time formatom.&nbsp;v bazi so datetime objekti shranjeni kot 2 int-a.

pril
pril - nedelja, 22. april 2007

No, za insert je stored procedura tako, tako -&nbsp; brez smisla :-) Razen če je kak&scaron;en zelo, zelo zapleten insert - v obliki insert-values pa res ni potrebe, nima baza kaj za v cache dat....Ima&scaron; kar celo kopico možnosti - varnost tukaj verjetno ni problem, če daje&scaron; direktno iz datumskega polja (ne pa direktno iz weba - pazi!) - to lahko naredi&scaron; kar za konvercijo v datetime.ToString(&quot;d&quot;) -&nbsp;z kulturo ki jo podpira baza (pazi, sql server je običajno na&scaron;telan na ameri&scaron;ko kultur:-lcid=1033 - to bi bilo potem v obliki MM/DD/YY - vedno pa vedno dela v univerzalni obliki, vsaj kolikor se spomnim &quot;YYYY-MM-DD HH:mm:SS&quot;)&nbsp;tip, potem pa tega v string, najbolj&nbsp;enostavno če da&scaron; v parameter. Lahko da&scaron; tudi v dataset potem pa naredi&scaron; update (za kanček počasneje, ampak pri update-u podpira &quot;optimistic&quot; preverjanje, kar ni tak napačno). Hja, ne gradit stavkov v kodi je lahko rečeno samo za ponavljajoče querije, ti pa so itak v cache-u baze, tudi če jih sproti gradi&scaron;, če se le parametri uporabljajo... no, po želji... za kak&scaron;ne scane tabel ipd pa jasno, samo stored procedura. Če rabi&scaron; objekte (žal brez source) za enostavnej&scaron;i dostop do baze, updejt ipd ti lahko dam link na svoje komponente - jasno, ker jih sam uporabljam so mi to najbolj simpl objekti na svetu :-)lp, pl

spirit1
spirit1 - nedelja, 22. april 2007

ce &scaron;e nisi pa &scaron;e bos kako dostopam do baze?ali preko dataseta ali pa kar z datareaderjem. cisto odvisno...drugace pa uporabljam vedno stored procedure ce se le da.nikoli ne gradim stavkov v kodi.ce pa jih ze moram (razni searchi) pa potem vedno uporabljam parametre.&nbsp;

matijaz
matijaz - nedelja, 22. april 2007

Hvala ti za odgovor.Pogledal sem stran, ki si jo predlagal, vendar me pa zanima kako pa ti dostopa&scaron; v bazo, kr preko DataSet-a? No ua enkrat &scaron;e nisem uvidel, bom pa vseeno častil pir pri naslednjem srečanju :)&nbsp;

spirit1
spirit1 - četrtek, 12. oktober 2006

Tvoj nacin insertiranja je konceptualno napacen.To sem enostavno moral povedati :))ok zdej pa k resitvi.Za dostop do baze uporabljaj stored procedure in ne sql stavkov zgrajenih v kodi.ce jih gradis v kodi kot ti sedaj in to das na produkcijo, ti za 2 uri dobim ven vse podatke pa se bazo ti dropnem. tako da ne delaj tega.V google napisi SQL injection attack pa bos videl.ce ze moras obvezno graditi sql stavke v kodi uporabljaj paramtere.preberi si tole:http://weblogs.sqlteam.com/jeffs/archive/2006/07/21/10728.aspxKo uvidis svoja napacna pota mi lahko castis en pir na naslednjem srecanju :))no zdaj pa k tvojem problemu:ne dela ti iz preprostega razloga ker je tvoj sql server nastiman na mdy format in ne dmykot si ga zelis ti. to nastavitev spremenis z set dateformat dmy vedno ko delas z datumi jih poslji v bazo v formatu yyyy-mm-dd say je to univerzalen ISO standard.ker pa jih itak mas v datetime objektu itak nimas problemov z castanjem in lahko samo reces parameter = MyDateValue&nbsp;&nbsp;