16 messaggi dal 07 maggio 2013
www.infomidia.it
Salve a tutti,
io ho un sito su Aruba che utilizza un db Access. Adesso ho acquistato un db SQL Server ed ho la necessità di importare alcune tabelle dal vecchio db al nuovo.
Ho provato ad esportare i dati in un file CSV, ma ho problemi con la tabella News (contiene testo HTML). Ho pensato quindi di utilizzare una query per l'insertimento dei dati. Ho la necessità di mantenere inalterato l'ID (chiave primaria) dei record. Se ho capito bene l'istruzione INSERT dovrebbe essere così:

cmd.CommandText = "SET IDENTITY_INSERT News ON;" +
"insert into News(ID, Titolo, Testo, Data) " +
"values(@id, @tit, @articolo, @aggiornamento);" +
"SET IDENTITY_INSERT NewsOFF;" ;


Il punto è come faccio a fare un ciclo per leggere i dati dalla tabella di origine (db Access) ed inserirli nella tabella di destinazione (db Sql Server)?

Grazie in anticipo.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
puoi fare a meno del file CSV. Prova invece con la classe SqlBulkCopy, ti permetterà di collegarti al database Sql Server e, grazie al suo metodo WriteToServer, di copiare tutti i record provenienti da un DataReader sorgente (ottenuto collegandoti al DB Access).
Qui trovi una guida:
http://www.codeproject.com/Articles/16922/SQL-Bulk-Copy-with-C-Net

Puoi facilmente preservare gli ID passando la specifica opzione KeepIdentity al costruttore di SqlBulkCopy
var bcopy = new SqlBulkCopy(tuaConnectionString, SqlBulkCopyOptions.KeepIdentity);


In alternativa avresti potuto importare il database Access sulla tua istanza locale di Sql Server, e poi crearne un backup da caricare su Aruba.
Il Management Studio ha una procedura guidata sia per l'importazione da Access che per la creazione di un backup.
In questa guida di Aruba, a pagina 30, trovi la procedura di ripristino del backup dal loro pannello.
http://videoguide.aruba.it/Database%20MSSQL/pannello2008/backup/backup.pdf

ciao
Modificato da BrightSoul il 15 giugno 2013 19.10 -

Enjoy learning and just keep making
16 messaggi dal 07 maggio 2013
www.infomidia.it
Grazie Moreno,
entrambe le soluzioni (che non conoscevo) sono davvero utili.
Io comunque ho risolto in modo "manuale", procedendo in questo modo:

1) Ho creato un dataset dalla tabella del db Access;
2) ho creato un ciclo for per controllare che i dati non contengano valori NULL quindi ho inserito i dati nella tabella di destinazione con l'istruzione:
cmd.CommandText = "SET IDENTITY_INSERT News ON;" + "insert into News(ID, Titolo, Testo, Data) " +  "values(@id, @tit, @articolo, @aggiornamento);" +  "SET IDENTITY_INSERT NewsOFF;" ;


certo è molto più grezzo rispetto alle soluzioni che mi hai proposto.

Grazie ancora :)
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, prego!

infomidia ha scritto:

certo è molto più grezzo rispetto alle soluzioni che mi hai proposto.

Fa nulla, trattandosi di una operazione una-tantum, l'importante è che abbia funzionato :)

Fai solo un rapido controllo su come sono stati convertiti i tipi di colonna, quando hai ricreato lo schema su Sql Server. Qui trovi delle linee guida.
http://blogs.msdn.com/b/ssma/archive/2011/03/06/access-to-sql-server-migration-understanding-data-type-conversions.aspx

ciao!
Modificato da BrightSoul il 17 giugno 2013 22.10 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.