Import da Db Access a Sql Server

venerdì 14 gennaio 2011 - 12.14
Tag Elenco Tags  VB.NET  |  .NET 3.5

erik77 Profilo | Senior Member

Ciao ragazzi,
avrei la necessità di effettuare un upload da una mia pagina aspx di un file access .mdb, vorrei effettuare l'import delle tabelle nel mio database sql server e inoltre salvare il file in una tabella con un campo "image".

Per effettuare questa "import" applicativa conoscete un modo veloce o dovrò ciclare per ogni record?

grazie
Ciao

alx_81 Profilo | Guru

>Ciao ragazzi,
Ciao

>avrei la necessità di effettuare un upload da una mia pagina
>aspx di un file access .mdb, vorrei effettuare l'import delle
>tabelle nel mio database sql server e inoltre salvare il file
>in una tabella con un campo "image".
a prescindere dal fatto che il tipo image è meglio non usarlo (perchè a breve sarà obsoleto: "ntext, text, and image data types will be removed in a future version of MicrosoftSQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead."), il database server è il tuo? Oppure sei su un hosting pubblico? Perchè se avessi in mano il server, con un ssis potresti cavartela con veramente poco..

>grazie
di nulla!

--
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

erik77 Profilo | Senior Member

grazie per la celere risposta, si il db è sul nostro server, quindi potrei fare un upload del file mdb sul server e poi lanciare da asp.net una ssid che mi faccia l'import?


grazie di nuovo

alx_81 Profilo | Guru

>grazie per la celere risposta, si il db è sul nostro server,
>quindi potrei fare un upload del file mdb sul server e poi lanciare
>da asp.net una ssid che mi faccia l'import?
se l'upload deve essere fatto da client e quindi sono gli utenti che decidono, puoi fare una paginetta che te lo gestisca e ti porti il file mdb in una cartella che il dbserver può vedere, almeno in lettura.
Poi, sul db server, puoi fare un sql server integration service (ssis), che altro non è che un processo che prende l'access, lo screma, lo filtra, lo trasforma e poi lo carica su sql server.
Conosci integration service? Che versione ed edizione di sql server hai? Perchè ci sono limitazioni..

--
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

erik77 Profilo | Senior Member

allora utilizziamo sql server 2005 , integration service lo conosco poco ma mi piacerebbe fare proprio qualcosa di simile, come potrei procedere? e comunque questa procedura db si può attivare dalla mia pagina aspx nel momento dell'upload?

grazie

alx_81 Profilo | Guru

>allora utilizziamo sql server 2005 , integration service lo conosco
>poco ma mi piacerebbe fare proprio qualcosa di simile, come potrei procedere?
ti consiglio di prendere spunto per qualche operazione dal mio blog: http://blogs.dotnethell.it/suxstellino/

>e comunque questa procedura db si può attivare dalla
>mia pagina aspx nel momento dell'upload?
diciamo che non è una buona prassi. Però puoi pensare di fare una tabellina o creare un file segnaposto che semplicemente funge da semaforo o comunque da "trigger".
Poi un job di sql server schedulato ogni minuto ad esempio, lancia il ssis il quale controlla se il semaforo è su "verde" per essere eseguito.
In questo modo hai fatto un poller sul server in asincrono senza appesantire la pagina web che segna solo l'esecuzione (o inserisce in una coda se devi gestire più di una esecuzione).
Alla fine il ssis segna quello che deve dove ti server, ed un'altra pagina web (o un controllo ajax) interroga il server per controllare quando l'operazione è terminata..
Questa è l'idea di massima..


--
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

erik77 Profilo | Senior Member

grazie dell'idea , ma io vorrei fare qualcosa di sincrono quindi fare l'import direttamente dalla pagina aspx al click di un bottone, quindi vorrei creare una import applicativa che sia performante, avete qualche idea oltre quella di ciclare per ogni riga ?


grazie

alx_81 Profilo | Guru

>grazie dell'idea , ma io vorrei fare qualcosa di sincrono quindi
>fare l'import direttamente dalla pagina aspx al click di un
>bottone, quindi vorrei creare una import applicativa che sia
>performante, avete qualche idea oltre quella di ciclare per ogni riga ?
Con ssis l'importazione è forse la più prestante che puoi trovare (insieme all'utilizzo della bcp utility).
Cosa intendi con "ciclare riga per riga"? Ciclare cosa?
--
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

erik77 Profilo | Senior Member

se non dovessi utilizzare un SSID dovrei creare una import applicativa da tabella access a tabella sql servert, quindi immagino che dovrei fare un ciclo e per ogni riga letta da una tabella dovrei inserirla nell'altra tabella, senza usare un SSID vedi altre strade?

alx_81 Profilo | Guru

>se non dovessi utilizzare un SSID dovrei creare una import applicativa
>da tabella access a tabella sql servert, quindi immagino che
>dovrei fare un ciclo e per ogni riga letta da una tabella dovrei
>inserirla nell'altra tabella, senza usare un SSID vedi altre
>strade?
SSIS = SQL Server Integration Serices

se non usi quello, puoi sì fare un programma che ti scorra il catalog di access ed effettui importazioni. Ma è un farsi del male inutilmente a mio avviso. Per questo tipo di operazioni di solito si usano strumenti di ETL (come appunto SSIS). Non l'ho mai fatto, ma potresti provare a fare letture dirette da sql server su un linked server access... Però senza ETL non saprei darti molti consigli..
--
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

erik77 Profilo | Senior Member

ho risolto usando la classe SqlBulkCopy grazie dell'aiuto
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