Hodnota Null   zodpovězená otázka

VB.NET, Databáze

Dobrý den,vím že se tu už problém s hodnoutou Null řešil, ale nenašel jsem v tom řešní mého problému, tak se pokusím na to optat.

Jde mi o to, že mám několik tabulek v databázi, různě propojené. Když chci vložit hodnotu Null do sloupce, že přímo přiřadím Nothing tak to jde, ale pokud chci přiřadit hodnotu Nothing pomocí porměnné do sloupce typu integer tak mi to nelze. Kód mám následující:

Dim mesto2 As String
Dim id_insuranceC As String
mesto2 = Nothing
id_insuranceC = Nothing ' tohle je jen pro ukázku, to jestli město(id pojišťovny) obsahue Nothing bo ne, záleží na vyplnění textboxu respektvive výběru pojištovny z comboboxu
 Dim newEmploye = New Employe
                newEmploye.ID_Employe = id
                ...
                newEmploye.UID_City2TEmployes = mesto2 'cizí klíč
                newEmploye.ID_IncomeTypeTEmployes = CmbDruhDuchodu5.SelectedValue
                newEmploye.StartDateIncome = DtpDuchod.Value
                newEmploye.ID_InsuranceCompanyTEmployes = id_insuranceC 'cizí klíč
                newEmploye.InsurenceNo = Nothing

                db.Employes.InsertOnSubmit(newEmploye)
                db.SubmitChanges()

Nahlásí to chybu, že cizí klíč se neshoduje s klíčem v jiné tabulce, což chápu protože ono to místo hodnoty NULL vloží do buňky 0. Neví te někdo prosím jak tam dostat tu hodnotu NULL?

Předem mooooc dík

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

Ta třída Employee je generována pomocí LINQ 2 SQL?

A jakého datového typu je InsurenceNo? Pokud je to jen Integer, tak do něj NULL hodnotu nikdy nevložíte, protože se jedná o datový typ. Musel by to být Nullable(Of Integer), pak by do něj bylo možné vložit i číslo, i null. Tady ovšem záleží na generátoru entity Employee.

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

Tak jsem to vyzkoušel s tím Nullable(Of Integer) a funguje jak má, díky moooc, už jsem zase o něco málo chytřejší :-)

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

Mohu se zeptat proč potřebujete do databáze vkládat hodnotu null? Já většinou usiluji o pravý opak (aby mi nikde null nezůstalo).

Jinak k vašmu problému, když příkazem insert into chci vložit hodnotu null tak mi to bez problému projde:

"insert into tb_pokus(id) values(null)"

kde ID je typu int. Zkoušeno na SQL severu 2000

(doufám že jsem dobře pochopil váš dotaz:)

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

U té pojišťovny například, jde o to, že pokud zaměstnanec je pojištěn u cizozemské pojištovny, tak se tam vloží id té pojišťovny a když ne, tak tam je Null.

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

Já bych to řešil raději tak, že bych si do číselníku pojišťoven vložil záznam ostatní nebo jiné . Jednak kdyby jste chtěl na straně aplikace s těmito daty něco provádět tak s hodnotou null může být (občas) problém a také pokud budete potřebovat vyjet nějáký přehled bude to lépe vypadat. Ale samozřejmě neznám vnitřní aplikační logiku takže jen střílím od boku návrhy:)

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

Null hodnota je v databázích nezastupitelná součást návrhu nejen relační logiky. Definuje stav + hodnotu a její používání rozhodně není na škodu. Je ale jasné, že musíte zvážit při návrhu kde být může a kde nesmí. Třeba v problému, který se řeší v tomto vlákně bych se spíš přikláněl k verzi s NULL hodnotou.

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

Ano hodnota null se může občas hodit ale pak je samozřejmě nutné si ji ohlídat aby se nepřipletla například do nějákého výpočtu. Pokud to není nezbytně nutné tak se snažím hodnotu null využívat co nejméně.

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

To je jako kdyby jste říkal, že null (Nothing) hodnota v programování je něco špatného. Je to součást návrhu a používat se má tam, kde se hodí. Nemyslím si, že tvrzení o využití jen v nezbytně nutných situacích je správné.

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