Utilizzo Visual Studio 2008 Pro.Impossibile ottenere SQL Server compatto 3.5/4 per lavorare con ASP .NET MVC 2
Probabilmente mi manca qualcosa di molto ovvio qui, ma ho cercato di ottenere il CTP per Sql Server compact 4 per funzionare nella mia applicazione asp.net mvc. Posso trovare accanto a nessuna istruzione su come impostare questo o un'applicazione di esempio di lavoro. Il mio obiettivo è un'installazione privata, quindi posso includerlo nella mia app Web senza dover eseguire l'installazione di SQL Server sul mio hosting di dominio. Questo è davvero solo me che spara al vento e sto cercando di capirlo. Non ho intenzione di ospitare un mercato o qualcosa di simile.
Quindi, ho copiato tutte le DLL installate nella direzione di base 4.0 (c: \ Programmi \ Sql Server compact \ v4.0) in una cartella lib nella mia applicazione. Ho impostato l'opzione di uscita della copia in uscita su "Copia se nuovo". Quindi faccio riferimento alla DLL System.Data.SqlServerCE e imposta "Copia locale" su True.
Ho creato un file sdf tramite Sql Studio Express. Una nota importante è che non ho visto un'opzione per creare una versione CE 4.0 di questo file, quindi è stata creata utilizzando CE 3.5. Creo alcune tabelle, aggiungo alcune righe a quelle tabelle, copia il file * .sdf nella directory App_Data. Vale la pena ricordare che, all'interno di VS 2008, questo file non viene mai visualizzato nel mio progetto, ma esiste nella posizione fisica della directory App_Data. Non sono sicuro del perché questo sia.
Avanti, ho solo provare a fare una connessione di base al mio file sdf tramite:
SqlCeConnection conn = new SqlCeConnection("DataSource=rpg.sdf");
Questo produce il seguente errore:
Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider of version 8402. Install the correct version of SQL Server Compact. Refer to KB article 974247 for more details.
ho dato da qui, avevo appena provare a ottenere Sql CE 3.5 per funzionare. Aggiorno la mia installazione locale di Sql CE 3.5 a sp2. Copio le DLL nel percorso di base (c: \ Programmi \ Sql Server compact \ v3.5), inclusa la rimozione e la lettura della versione della DLL System.Data.SqlServerCE dai riferimenti del mio progetto.
La cosa curiosa qui è quando clicco e guardo le proprietà della dll SqlServerCE di riferimento, dice sempre che è la versione 4.0.0.1.
Ragazzi, potrei davvero usare qualche direzione qui. Ho cercato lo stack overflow, i documenti di aiuto, i libri online e su Google. Non ho davvero trovato nulla che lo porti da cima a CE 3.5 o 4.0 e mi dice esattamente che cosa aggiungere, dove metterli, come fare riferimento a loro, come aggiungere il file .sdf al mio progetto, connettersi ad esso e interrogare da esso. Mi sono imbattuto in alcune menzioni di un'app campione del portale IBuySpy che avrebbe dovuto usare Sql CE 3.5, ma in realtà non è possibile navigare nel labirinto di download di msdn per arrivarci. Idealmente, voglio configurare una distribuzione privata per CE 4.0.
Sono tutto orecchie. Suggerimenti, punti, qualunque cosa sarebbe molto apprezzata. Grazie!
SI VEDO IL KB. Non ha aiutato
vederlo qui: http://support.microsoft.com/kb/974247
RISULTATI DA CORFLAG
Va bene, provato e questi sono i miei risultati: C: \ Sviluppo \ Mvc2MessingAround \ Mvc2MessingAround \ bin \ Lib> corflags System.Data. SqlServerCe.dll Strumento di conversione CorFlags di Microsoft (R) .NET Framework. Versione 3.5.21022.8 Copyright (c) Microsoft Corporation. Tutti i diritti riservati.
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 9
ILONLY : 1
32BIT : 0
Signed : 1
Avrei giurato di aver installato la versione x86 di entrambe le versioni di Sql CE (3.5/4). L'installer potrebbe essersi confuso in qualche modo perché il mio processore è a 64 bit, ma sto usando Windows xp sp 3 a 32 bit. I risultati sembrano indicare che è a 64 bit. È questo il caso?
Aggiunto dettagli
Ad oggi le configurazioni di seguito sono stati provati su 2 macchine. Entrambi sono Windows xp sp3 a 32 bit con un processore con 64 bit. L'ambiente di sviluppo su entrambi è VS 2008 Pro. I risultati sulla macchina 2 vengono dopo una nuova installazione di Sql CE 4 Ctp.
CONFIGURAZIONE # 1
myapp\bin\
System.Data.SqlServerCe.dll
myapp\bin\private
amd64
x86
myapp\bin\private\x86
sqlceca40.dll
sqlcecompact40.dll
sqlceer40EN.dll
sqlceme40.dll
sqlceqp40.dll
sqlcese40.dll
myapp\bin\private\amd64
sqlceca40.dll
sqlcecompact40.dll
sqlceer40EN.dll
sqlceme40.dll
sqlceqp40.dll
sqlcese40.dll
Errore:
An exception of type 'System.Data.SqlServerCe.SqlCeException' occurred in System.Data.SqlServerCe.DLL but was not handled in user code
Additional information: Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider of version 8402. Install the correct version of SQL Server Compact. Refer to KB article 974247 for more details.
Codice:
SqlCeConnection conn = new SqlCeConnection();
CONFIGURAZIONE 2
Uguale al numero 1, ma con System.Data.SqlServerCE.Entity.dll in direzione myapp \ bin.
Gli errori di pagina prima di colpire il codice sopra. Questo è il messaggio:
Impossibile caricare il file o l'assembly 'System.Data.SqlServerCe.Entity' o una delle sue dipendenze. Questo assembly è creato da un runtime più recente rispetto al runtime attualmente caricato e non può essere caricato.
Descrizione: si è verificata un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Si prega di rivedere la traccia dello stack per ulteriori informazioni sull'errore e sulla sua origine nel codice.
Dettagli eccezione: System.BadImageFormatException: impossibile caricare il file o l'assembly 'System.Data.SqlServerCe.Entity' o una delle sue dipendenze. Questo assembly è creato da un runtime più recente rispetto al runtime attualmente caricato e non può essere caricato.
Ho verificato le impostazioni del progetto in VS 2008 Pro e il framework .Net 3.5 è impostato come obiettivo.
CONFIGURAZIONE 3
Stesso come # 1, ad eccezione del System.Data.SqlServerCe.dll viene fatto riferimento dal myapp \ bin \ cartella privata.
I risultati sono uguali a CONFIGURAZIONE N. 1 (il messaggio di errore è uguale al 100% e l'errore si verifica sulla stessa riga di codice).
configurazione corretta
secondo le istruzioni del Erik (li avevo ho seguito con più attenzione), la messa a punto dovrebbe essere
myapp\bin
x86
amd64
System.Data.SqlServerCE.dll
riferimento lo System.Data.SqlServerCE.dll direttamente dalla cartella bin per il codice. La mia follia era pensare che la cartella privata dovesse essere inclusa, ma non è così. Non inserire System.Data.SqlServerCE.Entity.dll nella cartella bin a meno che non si stia utilizzando una soluzione .net 4.0. Non penso che la dll funzioni con 3.5.
Link utili:
System.Data.SqlServerCe.dll è Qualsiasi CPU .. – ErikEJ
Utilizzo di config 3, nessun file Entity.dll. Struttura delle cartelle errata! Copia i seguenti contenuti della directory (incluse le cartelle x86 e amd64) nella cartella bin della tua app ASP.NET: C: \ Programmi \ Microsoft SQL Server Compact Edition \ v4.0 \ Private Non ci dovrebbe essere nessuna cartella "Privata" in la tua cartella bin asp.net. Sotto la cartella bin, una cartella x86 e amd64, ognuna con i file corretti. – ErikEJ
Questo accade anche con VS 2010 e ASP.NET MVC 3 Beta – Jedidja