Problem pri uporabi metode AddWithValue razreda SqlCommand.Parameters

Ejla!

 Imam naslednji problem, ki mi že počasi para živce. Imam ObjectDataSource, ki pokliče metodo, kjer ji kot parameter podam spremenljivko tipa DateTime. V tej metodi kličem stored proceduro s pomočjo razreda SqlDataAdapter in mu kot parameter podam datetime spremenljivko. V bazi, do katere nimam dostopa, je ta parameter predstavljen v obliki varchar(10).

Izvedem takole:

SqlDataAdapter.SqlCommand.Paramaters.AddWithValue("dfrom", myVariable.ToShortDateTimeString()); 

 Problem, ki nastane, se pojavi pri klicu metode SqlDataAdapter.Fill, kjer napolnem DataTable objekt.

Napako, ki mi javi VS, je tale: "The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.". Prva ideja mi je padla, da je problem mogoče pri jeziku. Torej, 12 / 13 / 2006 (sem mislim, da se mu je tukaj kaj zmešalo - ampak če klic stored procedure na roke deluje, zakaj tukaj ne?).

Ampak, kaj ma to veze z DateTime-om, če mu podam string, na drugi strani mam pa varchar. Ne bi moral on interno to prevest v varchar? Šel sem pregledal še ta string za dolžino - če mogoče dobro ne vidim (njegova dolžina je 10 znakov). Potem sem sporazumno povečal stolpec (zgubil še dodatno količino živcev) in dosegel varchar(11). Napaka se ni spremenila. A ne bi moralo to delovati? Morm posegat po drastičnih ukrepih, kot je kladivo ???

Avtor: bojanv, 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.

MihaM
MihaM - četrtek, 14. december 2006

bojanv:Kok mate kaj izkušenj s tem Team System-om, ker men so pravli, da še rabjo kako leto, da ga urihtajo, da bo delal tko, k je treba, ker se bojda kr sesuva. Zanima me tudi, če se da prenašat v njem profile in ostale zadeve. Recimo, snippete, nastavitve okolja VS, kontrole itd. oziroma če je možna nadgradnja VSja Pro al ga morm dat dol? Team System mamo na firmi, samo si ga še nobeden ni dal gor, delamo še na VS Pro pa VSS 6.0. Team System so dodatki za VS2005 Pro in ne verjemem, da se kaj dosti bolj sesuva kot sam VS2005. Je pa res, da je v1 in da bo verjetno bolje zaživel ob SP1. Jaz bom vsekakor predlagal za naslednje projekte uporabo VSTS/VSFS

bojanv
bojanv - četrtek, 14. december 2006

Kok mate kaj izkušenj s tem Team System-om, ker men so pravli, da še rabjo kako leto, da ga urihtajo, da bo delal tko, k je treba, ker se bojda kr sesuva. Zanima me tudi, če se da prenašat v njem profile in ostale zadeve. Recimo, snippete, nastavitve okolja VS, kontrole itd. oziroma če je možna nadgradnja VSja Pro al ga morm dat dol? Team System mamo na firmi, samo si ga še nobeden ni dal gor, delamo še na VS Pro pa VSS 6.0.

AndrejT
AndrejT - četrtek, 14. december 2006

bojanv: Če mam VS 2005, kako potem to nadgradim z tem produktom? A se kupi pol to posebej ali se da kako nadgradit? Nimam nobene naročnine pa nič. Produkt je licenciran. Na MS strani nisem zasledil tega produkta za prodajo Če uporabljaš VS Team System, dobiš zadevo zastonj, drugače pa stane toliko, kot katerikoli drug član Team Systema (= veliko ).

MihaM
MihaM - četrtek, 14. december 2006

AndrejT:Nekaj osnovnega debugginga za sproce ti nudi že VS2005, drugače ga pa lahko nadgradiš z Data Dudo[m]  Ne vem zakaj, ma tale Dudo se mi je prenašal en teden s polžjo hitrostjo.

MihaM
MihaM - četrtek, 14. december 2006

Tistile Data Dudo je del Team System-a. Verjetno je "zastonj", če že imaš Team System Suite (ugibam).

bojanv
bojanv - četrtek, 14. december 2006

Če mam VS 2005, kako potem to nadgradim z tem produktom? A se kupi pol to posebej ali se da kako nadgradit? Nimam nobene naročnine pa nič. Produkt je licenciran. Na MS strani nisem zasledil tega produkta za prodajo

AndrejT
AndrejT - četrtek, 14. december 2006

Nekaj osnovnega debugginga za sproce ti nudi že VS2005, drugače ga pa lahko nadgradiš z Data Dudo[m] 

bojanv
bojanv - četrtek, 14. december 2006

Ja, očitno ste imeli prav, kar se tiče datuma. Malce sem se poigral, probaval variante pa varianta od AndrejaT dela. Hvala za pomoč! Kolikor pa vem, je pa stolpec zastavljen tako zaradi dinamičnega query-a. A obstaja kakšen tool, s katerim lahko sql stored procedure debug-as (brez print-a in SqlProfilerja--> to uporabljam že zdaj)? Ma Red Gate kaj pametnega? Tale Sql prompt od njih mi je zelo všeč

AndrejT
AndrejT - četrtek, 14. december 2006

Jup, namesto metode ToShortDateString() uporabi ToString("yyyy\\/MM\\/dd"). Prva oblikuje datum glede na regionalne nastavitve računa, pod katerim teče ASP.NET (strežniki pa so glede tega ponavadi tako zelo različno konfigurirani, da se ne zanašat na to, da je račun nastavljen pravilno).Torej, v ToString() uporabi format, ki gre skozi v stored proceduri, ko jo izvajaš na strežniku. Če je to mesec/dan/leto (kot sklepam iz tvojega posta), uporabi pak ToString("MM\\/dd\\/yyyy"). Lahko tudi pogledaš, kako ta input (varchar) parameter stored procedura prevede v datetime oz. kakšno obliko datuma pričakuje na vhodu.Glede konverzije med stringom in varcharom pa si ne delat preveč sivih las...[Backslashi v zgornjih formatih so zato, da pravilno vstavijo eksplicitne slashe v izraz]

petar.repac
petar.repac - četrtek, 14. december 2006

S strinjam z Miho, kar se tiče simptomov.Rad bi povedal samo to da, ne vidim nobenega razloga zakaj bi bilo dobro v bazi imeti datum v obliki varchara. Vem da do tam nimaš dostopa, vendar sem moral povedati. To je slab design, ki se še vedno precej pojavlja in moram še dočakati dan ko mi bo nekdo dal pameten razlog za kaj takega. 

MihaM
MihaM - sreda, 13. december 2006

Meni napaka zgleda kot da je zahtevan parameter tipa datetime in ne varchar(10) - pojamra namreč da ne zna pretvoriti varchar vsebine v datetime. Ali je pa kje znotraj stored procedure taka konverzija.Pretvoriti pa ne zna zato, ker bi rad imel v ameriškem formatu verjetno. Poskušaj s 'YYYYMMDD HH:mm' ali kaj takega.