Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

NULL i kako sa istim

[es] :: .NET :: NULL i kako sa istim

[ Pregleda: 4041 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

krvopije
Dusko Maksimovic
Beograd

Član broj: 3289
Poruke: 136
*.nat-pool.bgd.sbb.co.yu.

Sajt: www.reosonline.com


Profil

icon NULL i kako sa istim11.11.2004. u 21:36 - pre 235 meseci
Dakle,

radim jednu ASP.NET aplikaciju koja se naravno naslanje na baszu (MSSQL 2000) i nekom trenutku zelim da iz baze izvucem neke podatke da bih u biznis sloju napravio jedan objekat. Taj objekat ima propertiy koji je tipa int, i cija se vrednost popunjava odgovarajucom iz baze. Problem nastaje kada je ta vrednost u bazi NULL a C# ne dozvoljava postavljenje int na NULL. Kako ze zaobilazi ovakva situacija? tj. sta da svtavim za vrednost tog int-a????

Pozdrav
 
Odgovor na temu

krvopije
Dusko Maksimovic
Beograd

Član broj: 3289
Poruke: 136
*.nat-pool.bgd.sbb.co.yu.

Sajt: www.reosonline.com


Profil

icon Re: NULL i kako sa istim11.11.2004. u 23:14 - pre 235 meseci
Da sam sebi odgovorim:

int var=Convert.ToInt32(null)

to mi je trebalo
 
Odgovor na temu

erkan
Sarajevo

Član broj: 12339
Poruke: 267
195.222.35.*

ICQ: 238530669


Profil

icon Re: NULL i kako sa istim16.11.2004. u 11:19 - pre 235 meseci
moze i prilikom SELECT upita koliko je meni poznato (ako mislimo na istu stvar):

SELECT isnull(ime_kolone, 0)
Samo se budala saplice na kamen iza sebe.
 
Odgovor na temu

krvopije
Dusko Maksimovic
Beograd

Član broj: 3289
Poruke: 136
*.nat-pool.bgd.sbb.co.yu.

Sajt: www.reosonline.com


Profil

icon Re: NULL i kako sa istim16.11.2004. u 11:31 - pre 235 meseci
Pazi, nije ista stvar, je ne zelim da setujem promenjivu na 0 kada je u bazi NULL, jer to nije isto. 0 je poznato a NULL je nepoznato. Tako da zelim da prenesem to NULL iz baze na preomenjlvu. Jer sta ako vrijednost u bazi moze biti i NULL a isto tako i 0, pa kada vracam rezultat iz baze u oba slucaja dobijam 0, sto ne zelim!
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: NULL i kako sa istim16.11.2004. u 14:37 - pre 235 meseci
Tacno, nije isto, sto nas vraca na tvoj odgovor, posle komande:

int var=Convert.ToInt32(null)


var ce biti 0, ne null . Sta vise, kad vrsis upit nad poljem u DataRow, ako je polje u bazi NULL, vrednost polja nece biti null, nego DBNull.Value, a ako pokusas da izvrsis

int var=Convert.ToInt32(DBNull.Value)

dobices:

Object cannot be cast from DBNull to other types.

bas da bi se sprecilo da se NULL iz baze u kodu tretira kao 0.
Jedna od zaobilaznica je da promenljivu var deklarises kao object i da "boxujes" integer u nju i da imas neku konstrukciju nalik ovoj:

object var;
if (dr["Polje"] is DBNull)
var = null;
else
var = Convert.ToInt32(dr["Polje"]);

ali onda ne mozes da se zatrcis pa da koristis var kao integer bez da proveravas da li je null

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

krvopije
Dusko Maksimovic
Beograd

Član broj: 3289
Poruke: 136
*.nat-pool.bgd.sbb.co.yu.

Sajt: www.reosonline.com


Profil

icon Re: NULL i kako sa istim16.11.2004. u 14:55 - pre 235 meseci
Citat:

object var;
if (dr["Polje"] is DBNull)
var = null;
else
var = Convert.ToInt32(dr["Polje"]);


E, bas to je ono sto mi treba! Naravno da cu da provjeravam da li je NULL prije upotrebe!

Kada smo vec tu, deklarisanje promjenjive tipom object pa posle pretvaranje u u int, da li ima nekih mana?

Hvala
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: NULL i kako sa istim16.11.2004. u 14:57 - pre 235 meseci
Zato valjda u .NET 2.0 uvode nullable types.
 
Odgovor na temu

krvopije
Dusko Maksimovic
Beograd

Član broj: 3289
Poruke: 136
*.nat-pool.bgd.sbb.co.yu.

Sajt: www.reosonline.com


Profil

icon Re: NULL i kako sa istim16.11.2004. u 15:08 - pre 235 meseci
Jeste. ali dok to vrijeme ne dodje onda ovako!

[Ovu poruku je menjao krvopije dana 16.11.2004. u 19:11 GMT+1]
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: NULL i kako sa istim16.11.2004. u 17:25 - pre 235 meseci
Citat:
Dragi Tata: Zato valjda u .NET 2.0 uvode nullable types.


Bas me interesuje nasta ce to da lici u praksi. I sta ce biti zrtvovano zarad ove fleksibilnosti.

ako i najobicniji for-each nad nizom integera mora za svaki element da proverava da li je null, ode mas' u propas . A sta cemo tek sa deljenjem? Novi exception (EDivideByNull )?
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: NULL i kako sa istim16.11.2004. u 17:32 - pre 235 meseci
Ne verujem da će to biti problem. Koliko sam razumeo, ne omogućava se postojećim tipovima da dobiju vrednost null, već se uvode posebni "paralelni" tipovi koji mogu da budu null. Npr:

Code:

int? x = null; // nullable - obrati paznju na '?' u deklaraciji 
int y = 123; // stari, dobri int

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: NULL i kako sa istim17.11.2004. u 00:08 - pre 235 meseci
Hmm, možda sam ja samo stari paranoic, ali taj int? mi jako liči na boxovani int samo je sintaksa malo olakšana...

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

ZokiR
Zoran Radojković
Melburn, Australija

Član broj: 15986
Poruke: 109
*.gpm.net.au.



Profil

icon Re: NULL i kako sa istim17.11.2004. u 00:17 - pre 235 meseci
Jedan od načina za rad sa NULL vrednostima iz SQL Server baze je korišćenje tipova iz System.Data.SqlTypes namesmace-a (SqlInt32, SqlString, SqlDateTime...)

Dakle ako imaš

SqlInt32 var = dataReader.GetSqlInt32(0);

i ako je vrednost u bazi NULL, var će imati vrednost SqlInt32.Null, a var.IsNull će vratiti true.

Pored podrške za NULL vrednosti, ovi tipovi imaju istu preciznost kao i ekvivalentni tipovi u bazi čime se izbegava gubitak informacija u konverziji, a i performanse su bolje. Evo šta MSDN kaže na tu temu:
Citat:
The System.Data.SqlTypes namespace provides classes for native data types within SQL Server. These classes provide a safer, faster alternative to other data types. Using the classes in this namespace helps prevent type conversion errors caused in situations where loss of precision could occur. Because other data types are converted to and from SqlTypes behind the scenes, explicitly creating and using objects within this namespace results in faster code as well.
 
Odgovor na temu

ZokiR
Zoran Radojković
Melburn, Australija

Član broj: 15986
Poruke: 109
*.gpm.net.au.



Profil

icon Re: NULL i kako sa istim17.11.2004. u 00:35 - pre 235 meseci
Citat:
mmix: Hmm, možda sam ja samo stari paranoic, ali taj int? mi jako liči na boxovani int ;) samo je sintaksa malo olakšana...

int? je u stvari samo C# skraćenica za Nullable<Int32> (dakle, nema novih "paralelnih" tipova koji podržavaju null, nego se isto postiže pomoću nove Nullable klase i generics-a)
 
Odgovor na temu

krvopije
Dusko Maksimovic
Beograd

Član broj: 3289
Poruke: 136
*.nat-pool.bgd.sbb.co.yu.

Sajt: www.reosonline.com


Profil

icon Re: NULL i kako sa istim17.11.2004. u 09:01 - pre 235 meseci
Dakle, sta da radim ja?

Kada kreiram objekat sastavljen od nekoliko varijabli(vrijednosti su iz baze), da onda koristim za sve varijable koristim tipove System.Data.SqlTypes?

Sta ciniti?
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: NULL i kako sa istim17.11.2004. u 19:35 - pre 235 meseci
Citat:
ZokiR: Jedan od načina za rad sa NULL vrednostima iz SQL Server baze je korišćenje tipova iz System.Data.SqlTypes namesmace-a (SqlInt32, SqlString, SqlDateTime...)


Nazalost nijedan od ovih tipova nije serializable, pa im je upotreba prilicno limitirana na prosti read i write iz baze. Ne postoji podrska za ove tipove u Typed DataSet, sto te na kraju primorava da sve radis pesaka. Nije nemoguce, al nije bas ni prijatno, narocito ako se i gridovi pojave kao consumeri.

Citat:
ZokiR: int? je u stvari samo C# skraćenica za Nullable<Int32> (dakle, nema novih "paralelnih" tipova koji podržavaju null, nego se isto postiže pomoću nove Nullable klase i generics-a)


Sad ste me zaintrigirali pa se raspitah malo. Oni to jos uvek prelamaju kako ce i sta ce i koliko vidim ECMA jos nije nista rekla na tu temu. Ali bottom line opet se svodi na boxovanje value tipa unutar objekta, samo sto ce objekat biti malo jace tipiziran nego pre. Cak i provera za null mora da ostane, samo se koristi negativna logika (umesto isnull ide hasvalue), jer ce u suprotnom bez ove provere citanje default propertija Value pljunuti EValueIsNull exception. Koliko vidim jos niko nista ozbiljno ne komentarise na temu Nullable generics <-> ADO.NET, a to je ono sto nas pretezno intrigira.

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

ZokiR
Zoran Radojković
Melburn, Australija

Član broj: 15986
Poruke: 109
*.gpm.net.au.



Profil

icon Re: NULL i kako sa istim18.11.2004. u 04:58 - pre 235 meseci
Citat:
mmix: Nazalost nijedan od ovih tipova nije serializable, pa im je upotreba prilicno limitirana na prosti read i write iz baze. Ne postoji podrska za ove tipove u Typed DataSet, sto te na kraju primorava da sve radis pesaka. Nije nemoguce, al nije bas ni prijatno, narocito ako se i gridovi pojave kao consumeri.

Da, sve to stoji. Postoji jedan open source projekat koji nudi slične tipove sa mogućnošću serializovanja (http://nullabletypes.sourceforge.net/) ali ostaje problem DataSetova, bindinga itd.
Citat:
mmix: Koliko vidim jos niko nista ozbiljno ne komentarise na temu Nullable generics <-> ADO.NET, a to je ono sto nas pretezno intrigira.

Pretpostavljam da ADO.NET i dalje neće podržavati implicitnu konverziju iz null u DBNull i obratno, tako da će to morati da se radi ručno (mada će u C# to biti malo olakšano novim operatorom ??, npr. cmd.Parameters[0].Value = i ?? DBNull) ali bi bilo fino kada bi binding i automatsko generisanje "strongly typed" DataSetova imali podršku za Nullable<T>.
 
Odgovor na temu

zuxbg
Zoran Vujic
Beograd

Član broj: 38959
Poruke: 4
*.energodata.co.yu.



Profil

icon Re: NULL i kako sa istim18.11.2004. u 13:58 - pre 235 meseci
Database NULL "vrednost" i .NET 1.1

1. Način - korišćenje typed dataseta

Ako kreirate typed dataset MyDataset sa tabelom MyTable koja ima nullable kolonu MyColumn

MyDataset ds = new MyDataset();

a) provera:

if( ds.MyTable[0].IsMyColumnNull() ) {...}

b) set na null

ds.MyTable[0].SetMyColumnNull();

Znači, okruženje generiše dve pomenute metode: IsMyColumnNull i SetMyColumnNull.

2. Način - korišćenje parametara

Kada izvršavamo DML komande (SELECT, DELETE, INSERT, UPDATE) nad bazom koristimo prametrizovane stored procedure (mogu i sql queriju, ali svi znamo da tako ne treba!). Polja koja želimo da budu null u bazi predstavimo kao parametre čija je "vrednost" null. Primer koristi Oraclov data provider ODP.NET, na MS-ov.

OracleConnection con = null;

try
{
// Connection
con = new OracleConnection(m_conStr);
con.Open();

// Command
string cmdQuery = "mlp.login_f";
OracleCommand cmd = new OracleCommand(cmdQuery);
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;

// Params
//
// ZahtevId
//
OracleParameter opZahtevId = cmd.Parameters.Add("a_zahtev_id", OracleDbType.Char, 5, ParameterDirection.Input);
opZahtevId.Value = zahtevId;
//
// JMBG
//
OracleParameter opJmbg = cmd.Parameters.Add("a_jmbg", OracleDbType.Char, 13, ParameterDirection.Input);
opJmbg.Value = System.Convert.DBNull;
...
cmd.ExecuteNonQuery();
}
catch (System.Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
finally
{
if (con != null)
{
con.Close();
}
}
 
Odgovor na temu

[es] :: .NET :: NULL i kako sa istim

[ Pregleda: 4041 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.