Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Trasferire dati tra due database diversi
martedì 27 dicembre 2011 - 13.08
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 2.0
|
Windows 7
|
Visual Studio 2010
|
SQL Server Express
|
Oracle 9g
Daniel.ma
Profilo
| Newbie
12
messaggi | Data Invio:
mar 27 dic 2011 - 13:08
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
8.814
messaggi | Data Invio:
mar 27 dic 2011 - 14:10
>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
12
messaggi | Data Invio:
mar 27 dic 2011 - 14:45
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
8.814
messaggi | Data Invio:
mer 28 dic 2011 - 10:43
>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
12
messaggi | Data Invio:
mer 28 dic 2011 - 11:30
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
8.814
messaggi | Data Invio:
mer 28 dic 2011 - 12:12
>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
12
messaggi | Data Invio:
mer 28 dic 2011 - 13:19
cerco di fare delle nuove simulazioni e ti faccio sapere.
Ancora grazie dell'aiuto.
Daniel.ma
Profilo
| Newbie
12
messaggi | Data Invio:
gio 29 dic 2011 - 14:47
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
8.814
messaggi | Data Invio:
gio 29 dic 2011 - 14:59
>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
12
messaggi | Data Invio:
gio 29 dic 2011 - 16:03
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
8.814
messaggi | Data Invio:
gio 29 dic 2011 - 16:40
>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
Torna su
Stanze Forum
Elenco Threads
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 !