DataTable - DataColumn datový typ   otázka

VB.NET, ADO.NET, WinForms, Databáze

Dobrý den,

rád bych se zeptal na problém týkající se datového typu sloupců v DataTable. Vytvořím DataTable a v ní vytvořím 2 sloupce s určením datového typu:

Dim T as new DataTable
T.Columns.Add("DateTime", Type.GetType("System.DateTime"))
T.Columns.Add("Value", Type.GetType("System.Double"))

Následně použiji vytvořenou DataTable jako vstupní parametr metody:

Public Sub Count(ByRef table as DataTable)

Dim X as Date
X = table.Rows(1).Item(0)

End Sub

Problém je v tom, že pokud přistupuji k jednotlivým položkám v předané DataTable v metodě Count tak je jejich datový typ vždy Object a ne mnou vytvořený typ. Následně musím položku konvertovat na Date. Chci se zeptat, zda nepřistupuji k položkám chybně, nebo je u předané DataTable vždy datový typ sloupců Object. Díky.

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

nevím, nezkoušel jsem, ale typuji, že za tím item(0) bude muset být .něco (třeba .value)

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

Toto bohužel nelze.

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

a proč metoda count nastavuje proměnou x uvnitř sebe. proč se jmenuje count? co chcete dělat?

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

To je jen kvůli ilustraci. To, co se pak v metodě děje, se samotným problémem nesouvisí.

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

Můžete případně obejít předávání tabulky tím, že změníte platnost proměnné...

Public Class Form1
    Dim T As New DataTable
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        T.Columns.Add("DateTime", Type.GetType("System.DateTime"))
        T.Columns.Add("Value", Type.GetType("System.Double"))

        T.Rows.Add("24.10.2011", 23.55)
        T.Rows.Add("25.10.2011", 23.55)
        T.Rows.Add("26.10.2011", 23.55)

        count(T)
    End Sub

    Public Sub count(ByVal predanatabulka As DataTable)
        Dim X As Date
        X = predanatabulka.Rows(0).Item("DateTime") 'předá datum do proměnné x
        MsgBox(X)

        Dim y As Double
        y = predanatabulka.Rows(1).Item(1) 'předá value do proměnné y
        MsgBox(y)
    End Sub




End Class

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

Přesně toto právě nefunguje. Pokud si zapnete Option Strict ON tak zjistíte, že Vám VB nedovolí přiřazení položky z predanatabulka do proměnné X typu Date, protože položka je typu Object, i když byl sloupci přiřazen datový typ DateTime. Bez Option Strict ON to samozřejmě jde, protože VB udělá konverzi za Vás, aniž by jste ji explicitně přikázal.

To je právě celý můj problém, že při předání DataTable metodě se ze všech datových typů přiřazených sloupcům DataTable změní typ na defaultní Object, což je nežádoucí.

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

mě to takto funguje, nevím co od toho očekáváte, takže asi víc neporadím...

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

Ano, funguje to, i příklad uvedený na začátku funguje. Akorát probíhá implicitní konverze datového typu Object na Date a Double.

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