Trasferire dati tra due database diversi

martedì 27 dicembre 2011 - 13.08
Tag Elenco Tags  VB.NET  |  .NET 2.0  |  Windows 7  |  Visual Studio 2010  |  SQL Server Express  |  Oracle 9g

Daniel.ma Profilo | Newbie

Ciao a tutti.

Dove lavoro ho due database: uno su Oracle ed uno su SQLServer.

Devo trasferire dei dati dal primo al secondo e cercando sul web la
soluzione che mi piaceva di più e, credo, più pratica era quella di
usare SqlCommandBuilder.

La logica utilizzata è la seguente:
creo un dataset, creo due dataadapter, un sqldataadapter ed un
oracledataadapter.
Uso quello oracle per popolare il dataset.
Uso il SqlCommandBuilder per creare insertcommand, etc sul dataadapter
ed alla fine faccio un update sul sqldataadapter utilizzando il
dataset popolato da oracle.

Il programma non mi da errori, iol dataset risulta popolato, ma la
tabella su sqlserver mi resta vuota.

Come mai?

Posto il codice:

Dim ds As New DataSet
Dim sqlconn As New SqlConnection(SqlString)
Dim oraconn As New OracleConnection(OracleString)

Dim Sda As New SqlDataAdapter(sql, sqlconn)
Dim Oda As New OracleDataAdapter(sqlp, oraconn)

sqlconn.Open()
Dim Sbuilder As New SqlCommandBuilder(Sda)

Sda.InsertCommand = Sbuilder.GetInsertCommand()

oraconn.Open()
Oda.Fill(ds, table_name)

Sda.Update(ds, table_name)

oraconn.Close()
sqlconn.Close()

Grazie in anticipo per i consigli.
Daniel

alx_81 Profilo | Guru

>Ciao a tutti.
Ciao

>Dove lavoro ho due database: uno su Oracle ed uno su SQLServer.
se hai almeno la versione 2005 di sql server ed almeno l'edizione standard, potresti usare Integration Service, che serve proprio a quello.. che ne dici?

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Daniel.ma Profilo | Newbie

Intanto grazie per la risposta.
Volevo farlo da programma perchè ho la versione express di sqlserver a disposizione e non mi pare che da li si possa.
Mi sbaglio?

Al di là di questo, concettualmente il mio script dovrebbe funzionare. Tu hai idea del perchè non funzioni?

Grazie
Daniel

alx_81 Profilo | Guru

>Volevo farlo da programma perchè ho la versione express di sqlserver
>a disposizione e non mi pare che da li si possa.
>Mi sbaglio?
eh no, non ti sbagli purtroppo..

>Al di là di questo, concettualmente il mio script dovrebbe funzionare.
>Tu hai idea del perchè non funzioni?
ha provato a fare debug? Controlla quale insert command viene generato, controlla se il dataset viene popolato..
prova a controllare ogni step in debug..

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Daniel.ma Profilo | Newbie

nel debug non ottengo nessun errore.
Il dataset è popolato, la query di insert è quella che mi aspetto ma nella tabella di destinazione non trovo i dati.
Può centrare che la tabella di destinazione è vuota?


Non saprei cosa altro verificare..

ti do il testo delle query "sql" e "sqlp":

sql = "select id, codage, ragsoc from agenti"
sqlP = "select unico id, codage, ragsoc from sma_agen"

alx_81 Profilo | Guru

>nel debug non ottengo nessun errore.
>Il dataset è popolato, la query di insert è quella che mi aspetto
>ma nella tabella di destinazione non trovo i dati.
>Può centrare che la tabella di destinazione è vuota?
la GetInsertCommand() secondo me non ti serve a nulla.. torna il comando autogenerato già in costruzione del CommandBuilder..
ci vorrebbero strumenti per capire se quella Update gira come deve..
sicuro che debuggando il comando sia generato nell'update?
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Daniel.ma Profilo | Newbie

cerco di fare delle nuove simulazioni e ti faccio sapere.

Ancora grazie dell'aiuto.

Daniel.ma Profilo | Newbie

Ho fatto un po' di prove.

Se tolgo l'istruzione Sda.InsertCommand = Sbuilder.GetInsertCommand() l'insertcommand non viene popolato.

in entrambi i casi, ti confermo che il dataset viene popolato e che l'insert non viene mai eseguito.

Hai qualche altro consiglio che mi puoi dare?

Grazie
Daniel

alx_81 Profilo | Guru

>Ho fatto un po' di prove.
>Se tolgo l'istruzione Sda.InsertCommand = Sbuilder.GetInsertCommand()
>l'insertcommand non viene popolato.
>in entrambi i casi, ti confermo che il dataset viene popolato
>e che l'insert non viene mai eseguito.
>Hai qualche altro consiglio che mi puoi dare?
di solito faccio debug, controllo con il profiler (che però nella versione express di sql non è presente) e alla fine scelgo un'altra via.
Ti consiglio di fare una stored procedure e lanciarla via ado.net. Non amo i framework generatori di comando.
Ti fai la tua bella stored procedure che fa la insert o l'update (se hai 2008 puoi controllare anche il MERGE statement - http://technet.microsoft.com/en-us/library/bb510625.aspx - per fare upsert dei dati) e poi la lanci con un sql command semplice, evitando gli overhead che danno i dataadapter. Che ne pensi?
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Daniel.ma Profilo | Newbie

per forza di cose dovrò abbandonare questa strada e quella che indichi è sicuramente la più percorribile, però è un peccato.

Grazie mille comunque dell'aiuto.

Daniel

alx_81 Profilo | Guru

>per forza di cose dovrò abbandonare questa strada e quella che
>indichi è sicuramente la più percorribile, però è un peccato.
>Grazie mille comunque dell'aiuto.
gli oggetti che hai usato funzionano, di questo stanne certo, solo che secondo me non genera l'insert perchè il popolamento non è corretto nella select di partenza.
Hai provato a popolare con tutti i campi (la * per intenderci) perchè potrebbe essere che senza chiave non riesca a generare i comandi.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5