Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Auto-Moto
Mobilní telefony
Notebooky  |  Tablety
Příslušenství
Wearables  |  Ostatní
Svět hardware  |  Digimanie  |   TV Freak

.Net CF strongly typed DataTable a case-insensitive PK

Buthrakaur (61)|19.1.2006 08:20
mam takovy problem - pomoci xsdcf mam nekolik vygenerovanych strongly typed DataTable a u tabulek, kde primarni klic tvori String sloupec, mam problem s tim, ze se PK chova case-insensitive...
tj. nemuzu mit v takove tabulce najednou zaznamy s ID napr. "A" a "a" zaroven... pokud to tak v databazi mam, tak pri zavolani DataAdapterXY.Fill(DataTableXY) dojde k vyjimce "ConstraintException:Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.".

Pokud se pokusim o neco ve stylu:
[CODE]
//ITEMTYPES(ID String, Descr String)
myDS.ITEMTYPES.AddITEMTYPESRow("A", "AAA");
myDS.ITEMTYPES.AddITEMTYPESRow("a", "aaa");
[/CODE]
tak dostanu pro zmenu pri vlozeni druheho radku: "ConstraintException:Column 'ID' is constrained to be unique. Value 'a' is already present.".

nesetkal jste se s tim nekdo, resp nezna nekdo reseni, jak donutit PK v DataTable, aby se choval case-sensitive?
Buthrakaur (61)|19.1.2006 08:58
ze ja skoro vzdycky najdu odpoved, kdyz se zeptam :D

takze je to tim, ze defaultne je DataTable.CaseSensitive = false a xsdcf bohuzel negeneruje kod s implicitnim nastavenim CaseSensitive na true... kdyby nekdo nahodou vedel, jak xsdcf k nastavovani CaseSensitive donutit, tak prosim napiste...
beecher (9270)|19.1.2006 09:55
Ja vim, ze si zadelavam na flamewar, ale pouzivat case-sensitivity ve strukture databaze, tfujky...
Buthrakaur (61)|19.1.2006 10:00
nejde mi o strukturu (metadata rozhodne case-sensitive nemam), ale o string data v sloupci, ktery je unique/PK... viz muj prvni prispevek...
RStein (2012)|19.1.2006 12:26
XSD k tomu asi nedonutite, ale postupoval bych tak, ze si vytvorite potomka vygenerovane tridy, kteremu nastavite treba v konstruktoru CaseSensitive na true. Pak muzete tridy pregenerovavat a nemusite nastavovat CaseSensitive v puvodni tride...
Buthrakaur (61)|19.1.2006 12:39
nastesti se mi to ted podarilo uz v tom xsd... staci pridat do DataSet-elementu atribut msdata:CaseSensitive="true" a plati to pak pro vsechny jeho tabulky...
RStein (2012)|19.1.2006 12:41
Jo, pokud mate pristup k xsd, tak to jde. Ja myslel, ze stahujete data napr. z webove sluzby.

//Update: Jeste upresnim, v prvnim prispevku jsem mluvil o nastroji xsd.exe (nebo o tridach v .Net Frameworku, ktere tento nastroj pouziva) a v tomto prispevku o definicnim schematu - XSD.