| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Keskustelut - Visual Basic / C# / .NET - C# Taulun kopiointi Access-kannasta toiseeneditoitu: 11:22 25.1.10 Access_ 11:21 25.1.10 Pitäisi saada kopioitua taulu Kanta1.mdb:sta Kanta2.mdb:hen. Ensin pitäisi kopioida taulun rakenne ja sitten myös data. Nämä voi toki suorittaa samalla kertaa, jos on mahdollista. C# OleDbConnection conn = new OleDbConnection( "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + "C:\\phycoaide\\phycoaide.mdb;Persist Security Info=False;"); // retrieving schema for a single table OleDbCommand cmd = new OleDbCommand("taxa", conn); cmd.CommandType = CommandType.TableDirect; conn.Open(); OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.SchemaOnly); DataTable schemaTable = reader.GetSchemaTable(); reader.Close(); conn.Close(); LogFile.WriteLine(" "); foreach (DataRow r in schemaTable.Rows) { LogFile.WriteLine(" "); foreach (DataColumn c in schemaTable.Columns) { LogFile.WriteLine(c.ColumnName + ": " + r[c.ColumnName]); } } MessageBox.Show("done"); Yllä oleva snippet vaikuttaa fiksulta, mutta miten voin luoda taulun toiseen kantaan käyttäen DataTable:a hyväksi? schemaTablessa olisi kaikki tarvittava data taulun luomiseen. Datan voi sitten kopioida vaikka rivin kerrallaan Kanta1:stä Kanta2:seen.. Löytyykö porukoilta fiksuja ideoita? :) weicco 11:46 25.1.10 Löytyykö porukoilta fiksuja ideoita? :) Kopioi koko Access tiedosto. Access_ 12:14 25.1.10 Ei valitettavasti onnistu kopioimalla koko tiedosto, koska kohdekannassa on muissa tauluissa tietoa, mikä pitää säilyttää. Mutta idea oli kyllä fiksu! ;) Mutta tuolle koodinpätkälle ei ilmeisesti ole olemassa suoraa "reverse" toimintoa? Taulun scheman saa helposti ulos tietokannasta, muttei takaisin sinne? Edes vaikeasti? weicco 12:51 25.1.10 Schemaa ei saa "takaisin" kantaan helposti siksi, että se on tavattoman vaikeaa. Jos kanta olisi tyhjä, voisi schemasta luoda CREATE TABLE lauseet ja sillä selvä. Vaan entä jos kannassa onkin jo saman niminen taulu? Pitää vertailla onko taulun kentätkin saman nimiset, saman tyyppiset, samat rajoitukset yms. Lisäksi tulee ottaa huomioon mahdolliset uniikit indeksit, varsinkin, jos kohdekannassa on uniikki indeksi ja lähdekannassa ei (datan insertointi voi feilata). Olen joskus tuollaista tehnyt niin, että luin molempien taulujen scheman XML:ksi ja tein niistä deltan XSLT:llä. Se oli kamalaa :) Access_ 13:05 25.1.10 Minulla on yksinkertainen ratkaisu siihen, jos taulu on jo olemassa kohdekannassa: DROP TABLE... ;) Eli kyseisen taulu datalla kohdetietokannassa ei ole merkitystä. Kopioitavalla taululla ei myöskään ole linkkejä muihin tauluihin ja uniikit indeksit ilmeisesti siirtyy tyhjään tauluun lähdekannasta ongelmitta. Eli nähtävästi minun täytyy tehdä metodi, joka koostaa CREATE TABLE lauseen DataTablen schema-tiedoista, sitten siirtää data perässä? C#:ssa niin moni asia on valmiiksi tehty, että oletin tämänkin olevan automatisoitu... Vielä joutuu koodaaja kirjoittamaan koodia ;) weicco 13:48 25.1.10 |
![]() Haku
|