Použití ODBC pro zápis a čtení z CSV   otázka

VB.NET

Dobý den,

mám rozsáhlejší projekt ve Visual Basicu, kde mám několik objektů, dědičností a vnořování objektů. Nyní řeším ukládání.

Uvažoval jsem o XML, ale jelikož má být aplikace později serverová, tak se mi jako ideální řešení jeví použití ODBC, zatím pro testovací účely se zápisem a čtením z CSV souborů.

Prohledávám internet jak umím, vyhledávám klíčová slova jako visual basic, odbc, csv, atd.., ale jediné na co narážím jsou fóra, kde se řeší jen problémy a zápis je pokaždé trochu jiný.

Nevíte tedy někdo o nějakém kvalitně popsaném návodu/vysvětlení, klidně i v angličtině?

Nebo pokud to není nic extrémě složitého (SQL umím), jak připojím daný csv přes odbc a zapisuji do něj?

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

CSV je standardní textový soubor,tudíž bych tipoval,že zápis přes ODBC nepůjde..a ani nevidím důvod.Jde jen o formátovaný text

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

Zápis dat do CSV pomocí ODBC nejde (ovladač Microsoft Text Driver). Musíte použít něco ze System.IO.

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

Vím, že to je jen formátovaný text, nicméně jsem myslel, že by si ODBC vytvářelo nějaké záznamy navíc pro snadnější procházení, nebo něco podobného.

A co čtení z CSV přes ODBC? V jednom fóru jsem našel kus údajně funkčního kódu. Bohužel ale neobsahoval driver. Ten má být pravděpodobně v nějakém DSN či co.

Tady je:

    Dim cnn As New OdbcConnection("DSN=PipeTest")
            Dim adp As New OdbcDataAdapter("SELECT * FROM pipes.txt", cnn)
            Dim ds As New DataSet()
            cnn.Open()
            adp.Fill(ds, "Test")
            cnn.Close()
            TextBox1.Text = ds.Tables("Test").Rows(0).Item("FirstName")
            Dim dr() As DataRow = ds.Tables("Test").Select(TextBox2.Text)
            DataGrid1.DataSource = dr 

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

Žádné záznamy navíc si to nevytváří, CSV je obyčejný textový soubor. Čtení CSV pomocí ODBC ovladače Microsoft Text Driver je vynikající věc, umožňuje využít ADO.NET a SQL dotazy.

Příklad:

Imports System.Data.Odbc
Module Module1
  Sub Main()
    'Bude platné pro všechny CSV soubory ve složce C:\
    Using connection As New OdbcConnection("Driver={Microsoft Text Driver (*.txt; *.csv)};dbq=C:\;defaultdir=C:\;driverid=27")
      connection.Open()
      Using command As New OdbcCommand("SELECT * FROM Data.txt", connection)
        Using reader = command.ExecuteReader()
          Console.WriteLine(reader(0))
        End Using
      End Using
    End Using
  End Sub
End Module

Pokud chcete v CSV souboru mapovat hodnoty oddělené čárkami na názvy sloupců (např. pro použití s WHERE), musíte ve stejné složce vytvořit soubor Schema.ini a nastavit v něm hodnoty podle http://msdn.microsoft.com/en-us/library/... nebo http://office.microsoft.com/en-us/access...

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

Parádní, už se do toho pouštím, díky moc.

Jen ještě dotaz - lze nějakým způsobem donutit OdbcCommand aby udělal Update i při použití csv? Protože pokud bych měl pokaždé ukládat celý soubor, tak by se mohla snadno stát nějaká chyba.

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

V předchozím komentáři jsem jasně psal, že ODBC ovladač Microsoft Text Driver nepodporuje zápis. Z toho plyne, že ze SELECT, UPDATE, INSERT, DELETE podporuje pouze SELECT. Jinak dojde k vyjímce Nepovinná funkce není implementována.

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

Ještě si dejte pozor na jednu věc: Z vlastní zkušenosti vím, že program využívající uvedený ODBC ovladač je v 64bitovém systému nutné zkompilovat jako 32bitový. Project.../Properties/Compile/Advanced Compile Options.../Target CPU: x86 Ušetřil jsem vás hodin hledání důvodu, proč to nefunguje.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za veškerou pomoc, nyní už přepravuji aplikaci ke kompilace a prvnímu testování.

Ještě jednou díky.

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

Jde mi především o to, abych mohl vytvářet alespoň základní dotazy.

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