Ukládání datumů do SQL   zodpovězená otázka

ASP.NET WebForms

Čauky.

Mám databázi, kde k záznamu můžu přiřadit datum, ale není to povinné. Problém je, že jakmile žádný datum do TextBoxu nevyplním, dostanu vyjímku a hlášku s přetečením SqlDateTime. Je nějaký jednoduchý postup, jak předat při prázdném TextBoxu do databáze hodnotu NULL? Nebo mě aspoň prosím nasměrujte, jakým směrem by se mělo postupovat při řešení.

Díky moc

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Mno, postup tu samozřejmě je. Když ten ovladač bindujete, tak je třeba mu nadefinovat, že prázdný řetězec má považovat za hodnotu NULL. Tzn. něco ve smyslu:

txtNullable.DataBindings.Add(New System.Windows.Forms.Binding("Text", datasource, "FIELD", True, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged, ""))

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jo, to mě napadlo taky, že to bude muset jít nějakou podobnou cestou. Jen nevím jak říct FormView, že když je TextBox prázdný, má to považovat za hodnotu NULL a tam do databáze poslat NULL.

Jestli by se k tomu nedalo nějak využít třeba přímo LinqDataSource a jeho součáct:

<InsertParameters>
            <asp:ControlParameter ConvertEmptyStringToNull="true"/>
</InsertParameters>

Kde by mi přímo ConvertEmptyStringToNull ten převod prázných stringů na NULL dělal sám.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nastudujte si databindings.add, tam je parametr co definuje "nulovost".

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tazatel se ptá na ASP.NET.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

á, pardon. Přehlédl jsem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já osobně to ve svých aplikacích řeším tak, že pokud mám třeba sloupce platnost_od a platnost_do a například záznam je na dobu neurčitou (tzn platnost_do nepotřebuju) uložím tam maximální možnou hodnotu data a v aplikaci s tím počítám protože vím, že datum 31.12.9999 značí prázdný sloupec (aby se mi s tím lépe pracovalo, tak tam mám třeba ještě sloupec doba_neurcita který ma datový typ BIT a podle kterého to hned vyfiltruju).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za radu, ale přijde mi docela divný tam cpát nesmyslný datumy a pak to nějak ošetřovat a hlídat si, jesstli tam je datum 31.12.9999. Takže jsem to vyřešil nakonec tak, jak jsem původně zamýšlel. A to že jsem přímo parametry, které se mají ukládat do databáze v LinqDataSource přetypoval na hodnotu Null pomocí ConvertEmptyStringToNull, pokud není nic zadané následovně:

    <asp:LinqDataSource ID="LinqDataSource1" runat="server" 
        ContextTypeName="LinqToGSChWebDataContext" TableName="SeznamLisus" 
        Where="LisID == @LisID" EnableInsert="True" EnableUpdate="True">
       <InsertParameters>
            <asp:Parameter Name="StrOprava" Type="DateTime" ConvertEmptyStringToNull="true" />
            <asp:Parameter Name="GenOprava" Type="DateTime" ConvertEmptyStringToNull="true" />
            <asp:Parameter Name="Pozn" Type="String" ConvertEmptyStringToNull="true" />
       </InsertParameters>
        <WhereParameters>
            <asp:QueryStringParameter Name="LisID" QueryStringField="LisID" Type="Int32" />
        </WhereParameters>
    </asp:LinqDataSource>

Takže problém vyřešen a všem díky za podmětné rady, jak problém vyřešit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback