Errore durante l'importazione dati da excel a sql server

lunedì 23 novembre 2009 - 11.04

Anonimo Profilo | Senior Member

Ciao a tutti.
In una pagina del mio sito aspx ho un bottone in cui si effettuano delle query di importazione dati da excel a sql server.
Una delle query è la seguente:

INSERT INTO Commesse (Numerodoc, Cod_Arca) SELECT Colonna_TS, Cod_ARCA FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=percorso', [Foglio1$]) WHERE NOT EXISTS ( SELECT * FROM Commesse WHERE Numerodoc = Colonna_TS )

In localhost questa query funziona, ma una volta pubblicato il sito (sempre su questo pc) quella query già non funziona più (chissà perché, perché prima funzionava tutto e dal nulla non funziona più.
L'errore è il seguente:

Impossibile inizializzare l'oggetto origine dei dati del provider OLE DB "Microsoft.Jet.OLEDB.4.0" per il server collegato "(null)". Il provider OLE DB "Microsoft.Jet.OLEDB.4.0" per il server collegato "(null)" ha restituito il messaggio "Errore non specificato.".

Mi sapete spiegare il motivo di tale errore?
Il file excel è contenuto nel server. Ma anche se fosse su questo computer darebbe lo stesso problema.

motogpdesmo16 Profilo | Senior Member

E' più una domanda da sezione SQL SERVER piuttosto che ASP.NET.

Curiosità, a margine, ma stai lavorando con il software gestionale ARCA della Artel??

Anonimo Profilo | Senior Member

>E' più una domanda da sezione SQL SERVER piuttosto che ASP.NET.
>
>Curiosità, a margine, ma stai lavorando con il software gestionale
>ARCA della Artel??

Però lbenaglia mi ha detto di postare qui, quindi..

Comunque sì, lavoro con quel software lì. In azienda si ha quel software e io ho deciso di utilizzare anche SQL Server come database di un sito gestionale, in cui si hanno tutti i clienti e commesse presi da Arca.

giulyxiano Profilo | Junior Member

Scusa ma la sintassi di una query che fa insert è:

INSERT INTO
Nome_Tabella
VALUES
(valore1, valore2,....)

mi sembra che manchi VALUES o no??
Greco Giuliano

giulyxiano Profilo | Junior Member

Oppure così:

INSERT INTO
Nome_Tabella (colonna1, colonna 2,...)
VALUES
(valore1, valore2,....)

o anche come hai fatto tu:

però l'istruzione INSERT INTO richiede che il numero di campi da inserire sia uguale a quello specificato nella tabella di destinazione.
rova a controllare i campi se sono ugali .
Greco Giuliano

Anonimo Profilo | Senior Member

Ma il problema non è quello.. anche perché con la select seleziono soltanto i campi desiderati, che sono uguali a quelli dell'insert.

motogpdesmo16 Profilo | Senior Member

@Giulyxiano: la sintassi SQL scritta dal nostro amico è corretta

Dato per scontato che le funzionalità di OPENROWSET siano abilitate sull'istanza SQL "remota", prova anche a dare un'occhiata a questo interessante articolo di Marco Bellinaso: http://www.marcobellinaso.com/blog-ita/post/Importare-dati-da-Excel-a-SQL-Server-2005-Express.aspx

P.s.: rimpiango i tempi di ARCA, ci ho lavorato quasi 3 anni nello sviluppo di personalizzazioni per la versione Evolution!

Anonimo Profilo | Senior Member

>@Giulyxiano: la sintassi SQL scritta dal nostro amico è corretta
>
>
>Dato per scontato che le funzionalità di OPENROWSET siano abilitate
>sull'istanza SQL "remota", prova anche a dare un'occhiata a questo
>interessante articolo di Marco Bellinaso: http://www.marcobellinaso.com/blog-ita/post/Importare-dati-da-Excel-a-SQL-Server-2005-Express.aspx
>
>P.s.: rimpiango i tempi di ARCA, ci ho lavorato quasi 3 anni
>nello sviluppo di personalizzazioni per la versione Evolution!

Sì, le funzionalità sono abilitate.
Quell'articolo lo conosco anch'io, infatti è da lì che ho capito come importare dei dati da excel a sql server.

sankyu Profilo | Senior Member

mi sa che sto per sparare una ca....ata ma mi pare sia un problema di permessi nella creazione di quello che seppur in excel è un linked server a me lo stesso errore capitava tra 2 server sqlserver in fase di spostamento dati prova a fare una cosa di questo tipo: creati un linked server tra il tuo foglio excel ed il db e prova ad eseguire la query sostituendo adeguatamente i valori poi copia il codice per creare il linked e mettilo in una stored che esegui prima della query ,esegui la query ed elimini il linked con un'altra stored procedure
lo so che è incasinato ma mi pare sia proprio un problema di permessi nella creazione della connessione tra sqlserver ed il tuo foglio excel

Anonimo Profilo | Senior Member

>mi sa che sto per sparare una ca....ata ma mi pare sia un problema
>di permessi nella creazione di quello che seppur in excel è un
>linked server a me lo stesso errore capitava tra 2 server sqlserver
>in fase di spostamento dati prova a fare una cosa di questo tipo:
>creati un linked server tra il tuo foglio excel ed il db e prova
>ad eseguire la query sostituendo adeguatamente i valori poi copia
>il codice per creare il linked e mettilo in una stored che esegui
>prima della query ,esegui la query ed elimini il linked con un'altra
>stored procedure
>lo so che è incasinato ma mi pare sia proprio un problema di
>permessi nella creazione della connessione tra sqlserver ed il
>tuo foglio excel


Infatti la penso anch'io che sia problema di permessi.. Però.. linked server... illuminami un po'.

Anonimo Profilo | Senior Member

Avrei poco tempo per risolvere questa situazione cavolo.

sankyu Profilo | Senior Member

mi disp ma nn ho molto tempo posso solo darti il link alla msdn per i linked server
http://msdn.microsoft.com/en-us/library/ms188279.aspx
se aspetti fino a sabato posso fare delle prove

Anonimo Profilo | Senior Member

Ti ringrazierei moltissimo!

Anonimo Profilo | Senior Member

>mi disp ma nn ho molto tempo posso solo darti il link alla msdn
>per i linked server
>http://msdn.microsoft.com/en-us/library/ms188279.aspx
>se aspetti fino a sabato posso fare delle prove

Alla fine niente? Scusa se insisto.

Anonimo Profilo | Senior Member

Qualcuno?

motogpdesmo16 Profilo | Senior Member

Tempo fa ti avevo suggerito di verificare che le funzionalità di OPENROWSET fossero abilitate sull'istanza in questione.

Sinceramente non ricordo di aver mai trovato tantissime difficoltà nell'effettuare l'operazione che desideri fare tu..

Anonimo Profilo | Senior Member

Ma infatti sono abilitate.

motogpdesmo16 Profilo | Senior Member

Altra cosa che io ho impostato nel mio foglio excel è stata quella di denominare l'area dati selezionandola e poi andando a denominarla in alto a sx dove solitamente ti compare il riferimento della cella correntemente selezionata. In quella casella solitamente metto il nome della tabella fittizia (nel tuo caso puoi mettere "Commesse") e di conseguenza la sintassi diventerebbe

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Prova un po'.

Anonimo Profilo | Senior Member

Ma si vorrebbe una cosa più immediata, più automatica possibile. Prendo da ARCA i dati che voglio e direttamente, senza aprire il file xls, aggiungo i dati sul database facendo click sul bottone nel sito.
Vi posto il codice così capite meglio.
Devo eseguire tutta questa catena di query:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

motogpdesmo16 Profilo | Senior Member

Domanda forse banale: ma quando tenti le query via Sql Server Management System, il file .xls ce l'hai chiuso??

Anonimo Profilo | Senior Member

Sì chiaramente.. in entrambi i casi (cioè sia da Sql Server che dal sito).

Anonimo Profilo | Senior Member

Qualcuno?

Gluck74 Profilo | Guru

Ciao,

il problema penso che venga fuori in base ai permessi utente.
Ovvero mentre stavi sviluppando, probabilmente stavi utilizzando un utente con permessi speciali, mentre dal sito pubblicato usi un altro utente.
Mi viene in mente questo perché l'istruzione OPENROWSET ha bisogno di permessi speciali.
Non sono sicuro che sia questo il problema unico, ma fai questo controllo

Un'altra cosa, io in un'applicazione ho avuto più o meno lo stesso problema, ed ho risolto facilmente con una tabella temporanea.
Ovvero crei la tabella temporanea, ci butti dentro tutti i dati dall'excel, fai la query che ti serve, togli la tabella temporanea.
Lo fai facilmente da codice così eviti di usare OPENROWSET che ti da problemi.

ciao ciao

Anonimo Profilo | Senior Member

>Un'altra cosa, io in un'applicazione ho avuto più o meno lo stesso
>problema, ed ho risolto facilmente con una tabella temporanea.
>Ovvero crei la tabella temporanea, ci butti dentro tutti i dati
>dall'excel, fai la query che ti serve, togli la tabella temporanea.
>Lo fai facilmente da codice così eviti di usare OPENROWSET che
>ti da problemi.

E questo come faccio? Non sarebbe la stessa cosa con l'openrowset, ma cambia soltanto il fatto che crei una tabella temporanea?

Gluck74 Profilo | Guru

Basta scrivere << creazione tabelle temporanee SQLSERVER >> su google..........

http://www.dotnethell.it/forum/messages.aspx?ThreadID=22746
http://forum.html.it/forum/showthread/t-706024.html
http://www.dotnet2themax.it/ShowContent.aspx?ID=a6e528e2-ca7b-4b48-ae15-4cd29dbc22b3
http://msdn.microsoft.com/it-it/library/ms177399.aspx

Anonimo Profilo | Senior Member

Io ho trovato anche questo:

http://www.dotnethell.it/Forum/messages.aspx?ThreadID=33154

Che ne dici? La cosa che non capisco è come si fa a importare i dati del file excel su questa tabella temporanea, senza utilizzare l'openrowset. Capito?

Gluck74 Profilo | Guru

Be si, una soluzione anche facile da realizzare è un pacchetto SSIS (file.dtsx), ma dovresti avere i permessi per installarlo poi su SQLServer per lanciarlo.

Viceversa da codice è facile. Fai un datareader con connessione al file excel (la stringa di connessione è facile da costruire o reperire, importante è che usi una semplice connessione OLEDB come per l'openrowset, e non altra roba che deriva da office interop.

Aperto il reader infili tutto in una tabella temporanea, poi fai una query uguale a quella che facevi già, dove invece di usare l'openrowset usi la tabella temporanea.

Dovresti farcela, non ti scoraggiare. Scusa ma non ho tempo per scriverti il codice.

ciao ciao
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5