Help programmare su Windows ce

mercoledì 04 marzo 2009 - 11.25

Samb1985 Profilo | Junior Member

Per la prima volta devo realizzare un'applicazione (che usa db sql server 2005) per dispositivo windows ce 5.0 con vs2005 in c#.

Esiste qualche guida utile per programmare su windows CE ?
Ho bisogno consigli su quale sql installare sul dispositivo per far girare l'applicazione, come testare l'applicazione sul dispositivo e che eseguibili usa windows ce, e tutti le altre cose utili da sapere per chi non ha mai usato window ce 5.0.

Grazie in anticipo.

Jeremy Profilo | Guru

Ciao Stefano.
il dicorso è troppo lungo....se vuoi davvero sapere tutto su Windows Ce .... cerca informazioni in MSDN.
Troverai sicuramente quello che ti serve.

Facci sapere....
Ciao

R3GM4ST3R Profilo | Junior Member

Ciao Samb1985,
un paio di dritte per iniziare...
Come database sql per dispositivi CE io uso sqlserverce 3.5 (Microsoft SQL Server Compact 3.5)
Le istruzioni T-SQL sono quasi le stesse dell'sqlserver normale per PC.
Sconsiglio vivamente di usare più di 2 thread simultanei. (uno per la gui ed uno solo per eseguire operazini particolari in background...creando troppi thread, il sistema rallenta notevolmente)
Per quanto riguarda invece la progettazione dell'interfaccia grafica ti consiglio di usare pochi FORM, e di compattare il più possibile le schermate in panel che rendi visibili a runtime, così da velocizzare il passaggio da una schermata all'altra. (è meglio che ci metta 20 secondi ad avviarsi e sia fluido nel passaggio delle schermate)

Altre dritte non saprei...dipende da ciò che devi implementare.


Se hai domande + specifiche fammi sapere!

Ciao!



Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

Allora l'applicazione deve accedere via wireless ad un db sql server 2005 che sta su un server ed è utilizzato anche da altre applicazioni. Ci sono problemi ? quale sql devo installarer sul dispositivo ?

Per quando riguarda la compilazione e il test dell'applicazione sul dispositivo ci sono procedure particolari rispetto alle normali applicazioni per pc ?

Tra le MSDN è pieno di cose per Mobile, è simile al CE, oppure è tutto un altra cosa ? visto che per CE non riesco a trovare nulla.

R3GM4ST3R Profilo | Junior Member

Ciao, se non ho capito male, vorresti connettere un palmare con winCE ad un database SQLServer residente su di un PC in rete sfruttando la connessione wireless?
In teoria per fare questo non hai bisogno di un database locale sul palmare, poichè i dati stanno sul server...A meno che tu non voglia fare una cosa del tipo, mi connetto al server, scarico dal database centrale determinate informazioni, dopodichè mi sconnetto dal server, elaboro le informazioni e successivamente mi riconnetto e carico le info elaborate nel database del server...(soluzione migliore dal punto di vista del risparmio energetico del palmare)
Non si capiscono bene le tue intenzioni.

Comunque ti preannuncio che purtroppo non vi è modo di accedere direttamente all'sqlserver 2005 sul PC della rete dall'applicazione del palmare.
L'unico modo di fare una cosa simile è creare un webservice, o windows service sul PC dove risiede SQLServer e implementarsi tutta la comunicazione per recuperare i dati.
Ti consiglio caldamente la strada webservice, sono più semplici di quanto si possa immaginare, ed una volta implementato il webservice lo si importa come riferimento al progetto per dispositivi CE e il gioco è fatto, in pratica il webservice sarà visto dal progetto per dispositivi palmari come una sorta di libreria con delle funzioni da richiamare.
Cmq come database per palmare, una volta che tu crei un'applicazione per dispositivi palmari con visual studio, ed al suo interno ci infili un database, il visual studio stesso installerà nel dispositivo palmare il gestore database adeguato...in sostanza ti installerà Microsoft SQL Server Compact 3.5 sul palmare!
Differenze tra programmi per Windows Mobile e Windows CE non ce ne sono, fatta eccezione per l'interfaccia grafica...nel mobile i components sono meno belli da vedere, mentre nel windows CE sono più simili windows.


Ciao!


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

R3GM4ST3R Profilo | Junior Member

Ah, mi chiedevi anche per il test/debug delle applicazioni per dispositivi portatili, be, visual studio mette a disposizione degli emulatori, sui quali verrà caricato il progetto per poterlo debuggare...oppure distribuisci il progetto direttamente su un palmare...

Tieni presente che il debug di applicazioni per palmari è un po' una rottura di palle, perchè quando metti i breckpoint nel codice, ed il debugger si ferma e ti fa eseguire passo passo, non puoi editare il codice sorgente, quindi se hai sbagliato qualcosa, devi stoppare il progetto, modificare il sorgente, ricompilare, e ridistribuire l'applicazione.

Ciao!



Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

Provo a spiegarmi meglio.

C'è un db Sql Server 2005 su un server nella mia rete. A questo db devono accedere (via wifi) l'applicazione del palmare (che devo fare) e una windows application (già fatta) che sta su dei pc fissi ed accede sempre via wifi.

Non è possibile per il palmare con win ce accedere al db (per query e update) via connection string come per la windows application ? l'unica soluzione è il web services ?

R3GM4ST3R Profilo | Junior Member

No, il fatto è che non è possibile usare una windows application in windows CE!
Devi riscrivere la tua Windows Application, come progetto smart device, altrimenti non parte nemmeno!
E dal dispositivo portatile non puoi accedere direttamente al database sqlserver come faresti da una applicazione windows normalissima, poichè sono due ambienti diversi!




Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

R3GM4ST3R Profilo | Junior Member

POST DOPPIO... sorry!

R3GM4ST3R Profilo | Junior Member

Rettifico, forse invece sfruttando la classe SQLClient nativa del framework è possibile farlo...domani potrò essere più preciso!
Questa è un'ottima notizia anche per me!
Ammesso che si possa realmente fare!

Ciao!


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

R3GM4ST3R Profilo | Junior Member

Rettifico, forse invece sfruttando la classe SQLClient nativa del framework è possibile farlo...domani potrò essere più preciso!
Questa è un'ottima notizia anche per me!
Ammesso che si possa realmente fare!

Ciao!


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

R3GM4ST3R Profilo | Junior Member

(Io ho provato con un palmare, connesso tramite active sync, non tramite wifi, ma dovrebbe essere la stessa cosa!)
Usando la classe sqlclient, aggiungendo ai riferimenti syste.data.sqlclient dal progetto per smart device puoi usare il palmare per fare query remote sull'SQLServer usando il medesimo codice che usi nelle windows application, fatta eccezione per alcune proprietà!

Figata, ho scoperto anche io una cosa nuova!

Il viceversa pourtroppo non è ancora possibile, ossia non vi è modo di interrogare un database sqlserverCE da PC...purtroppo!

Vabè, spero di esserti stato utile!

Ciao!


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

Bene, il fatto che con il palmare posso fare query su un db sql server 2005 esistente su un server via wifi mi rincuora....ora è come si fa il problema. Basta settare la stringa di connessione ? qualche dritta non sarebbe male...
Grazie per la disponibilità.

R3GM4ST3R Profilo | Junior Member

Ok, ecco uno stralcio di codice :

Private Sub CacheDatabase()
'//IL PCDEV non è in un dominio, il palmare usa l'utente PCDEV\Utente per accedere al database
Dim CN As New SqlClient.SqlConnection("Data Source=PCDEV\SQLEXPRESS;Initial Catalog=DATABASE;Integrated Security=SSPI;User ID=PCDEV\Utente;Password=Password;")
Dim CMD As SqlClient.SqlCommand = Nothing
Dim RST As SqlClient.SqlDataReader = Nothing
Try
CN.Open()
CMD = New SqlClient.SqlCommand("SELECT * FROM TABELLA", CN)
RST = CMD.ExecuteReader
While RST.Read
Me.listview1.items.add(RST.Item("0"))
End While
CMD = Nothing
If CN.State = ConnectionState.Open Then
CN.Close()
End If
Catch ex As Exception
MsgBox("Errore!" & vbCrLf & ex.Message)
End Try
End Sub

Ti ricordo che tra i riferimenti del progetto per dispositivi mobile devi aggiungere a mano la classe sqlclient, altrimenti non va una minkia!


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

Ho problemi di connection string. Per ora, in fase di sviluppo, sto utilizzando un db (senza user e password) locale dell'applicazione, poi dovrò appoggiarmi sul db sul server.

Per le query utilizzo dataset e table adapter, dove devo settare la connection string e quale ?
Quella dell'esempio sopra non me la compila, da errore su ""Data Source=PCDEV\SQLEXPRESS" PCDEV.

R3GM4ST3R Profilo | Junior Member

Ciao Purtroppo per leggere i dati contenuti nel DB dal dispositivo palmare è necessario impostare un account di accesso!
O meglio, io sono riuscito solamente con un utente windows impostato come dbo del database...
>Premessa
NomeServer è il nome della macchina su cui gira sqlserver express 2005, e UtentePAD sarà l'utente con cui il palmare accederà al database, dbData è il database a cui dovrà accedere il palmare.
>Fine Premessa
Quindi primo passo, crei un utente windows dal pannello di controllo e lo chiami ad esempio
UtentePAD, gli imposti una password.
Una volta fatto ciò devi aggiungere l'utente appena creato al database sqlserver2005 (in modo che da remoto puoi accedere al database con l'utente : UtentePAD e la sua relativa password)
Per fare questo, o usi SQL Management Studio Express, oppure esegui questa procedura sql

>USE Master
>GO
>CREATE LOGIN [NomeServer\UtentePAD] FROM WINDOWS WITH DEFAULT_DATABASE=[dbData]
>GO

Una volta eseguita questa procedura, hai aggiunto l'utente al database a cui accedere, quindi sei pronto a spostarti sul progetto del palmare

Ora prendendo la routine postata in precedenza :

Private Sub CacheDatabase()
'//"NomeServer\SQLEXPRESS" è il nome dell'istanza di sqlserver 2005 express, se usi un'altra versione di sqlserver, basta il nome macchina "NomeServer"
Dim CN As New SqlClient.SqlConnection("Data Source=NomeServer\SQLEXPRESS;Initial Catalog=dbData;Integrated Security=SSPI;User ID=NomeServer\UtentePAD;Password=Password")
Dim CMD As SqlClient.SqlCommand = Nothing
Dim RST As SqlClient.SqlDataReader = Nothing
Try
CN.Open()
CMD = New SqlClient.SqlCommand("SELECT * FROM TABELLA", CN)
RST = CMD.ExecuteReader
While RST.Read
Me.listview1.items.add(RST.Item("0"))
End While
CMD = Nothing
If CN.State = ConnectionState.Open Then
CN.Close()
End If
Catch ex As Exception
MsgBox("Errore!" & vbCrLf & ex.Message)
End Try
End Sub

Cominciamo a vedere se almeno vediamo dei dati così, poi passiamo ai dataset e compagnia.


Fammi sapere!

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

Al momento il db è locale all'applicazione, quindi si trova sul palmare quando mando in esecuzione (non ho ancora a disposizione il server). Per il momento mi serve la connection string per il db locale (in C# se possibile).

E' possibile creare un file app.config (come per le windows application) in modo da scrivere la connection string una sola volta e non ogni volta che si deve fare una query ?

R3GM4ST3R Profilo | Junior Member

Ah ok, ora è chiaro, quindi stai usando l'sqlCE nel palmare...vabè allora in tal caso la stringa di connessione per aprire il database su SQLCE è molto semplice
"Data Source=\Program Files\Application\Database.sdf"
Chiaramente il path dipende dal tuo palmare, un esempio in VB è il seguente
(purtroppo scrivo in VB, converti il codice con qualche converter online tipo questo http://www.developerfusion.com/tools/convert/vb-to-csharp/)

Private sub ExecuteQuery()
Try
Dim CN As New SqlCeConnection("Data Source=\Program Files\Application\Database.sdf")
Dim CMD As New SqlCeCommand("SELECT * FROM TABELLA", CN)
If CN.State = ConnectionState.Closed Then
CN.Open()
End If
Dim RST As SqlCeDataReader = CMD.ExecuteReader()
While RST.Read
me.listview1.items.add(RST.item(0))
End While
If CN.State = ConnectionState.Open Then
CN.Close()
End If
Catch ex As Exception
msgbox(ex.message())
End Try
End Sub

il codice in c# dovrebbe essere simile a questo

private void ExecuteQuery()
{
try {
SqlCeConnection CN = new SqlCeConnection("Data Source=\\Program Files\\Application\\Database.sdf");
SqlCeCommand CMD = new SqlCeCommand("SELECT * FROM TABELLA", CN);
if (CN.State == ConnectionState.Closed) {
CN.Open();
}
SqlCeDataReader RST = CMD.ExecuteReader();
while (RST.Read) {
this.listview1.items.@add(RST.item(0));
}
if (CN.State == ConnectionState.Open) {
CN.Close();
}
}
catch (Exception ex) {
Interaction.msgbox(ex.message());
}
}

Fammi sapere!

P.S. Ma ti è arrivato il mio messaggio personale??


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

Il db è un file mdf (la copia di quello che sta sul server).
Mi da errore "Il file di database protrebbe essere danneggiato. Eseguire l'utilità di correzzione per controllare il file di database" Il db non è danneggiato da errore perchè è un mdf ?

R3GM4ST3R Profilo | Junior Member

Certamente!
Non puoi usare un database sqlserver 2005 collegato al palmare tramite sqlserverCE, sono due programmi diversi che vivono in due ambienti diversi.

.sdf -> Database per dispositivi palmari leggibili solo ed esclusivamente con il visual studio e dal dispositivo palmare
.mdf -> Database sqlserver, per PC

Tu dal palmare puoi connetterti ad una istanza di sqlserver che risiede su un PC (col metodo che ti ho illustrato quì sopra) ma NON puoi dal dispositivo palmare prire un file dell'sqlserver 2005.
Quindi ti consiglio di usare l'sqlexpress del tuo PC come "server" di database e di connetterti a lui usando il palmare mediante la classe sqlclient come descritto sopra, così ti fai un'idea anche dei vari tempi di trasferimento dati.


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

Allora ho caricato il mio db .mdf sulla mia istanza di SqlExpress, ora per lavorare in locale, voglio accedere al db sul mio pc attraverso l'applicazione in esecuzione sul palmare collegato al pc via Active Sync usb.

Qual'è la giusta stringa di connessione ?
Ho provato la seguente e varie varianti di questa:
Data Source="Mio-PC\\SQLEXPRESS;Initial Catalog=miodb.MDF;Integrated Security=SSPI;User ID=user;Password=psw"

System.Data.SqlClient.SqlException: SqlException in System.Data.SqlClient.SqlConnection.OnError() in ....SqlInternalConnection.OnError...

R3GM4ST3R Profilo | Junior Member

>Allora ho caricato il mio db .mdf sulla mia istanza di SqlExpress, ora per lavorare in locale, voglio accedere al db sul mio pc attraverso l'applicazione in esecuzione sul >palmare collegato al pc via Active Sync usb.
Perfetto!
Se hai anche già creato il nuovo utente di windows, e l'hai aggiunto tra gli utenti del database, il tuo computer è configurato in modo completo!

>Qual'è la giusta stringa di connessione ?
>Ho provato la seguente e varie varianti di questa:
>Data Source="Mio-PC\\SQLEXPRESS;Initial Catalog=miodb.MDF;Integrated Security=SSPI;User ID=user;Password=psw"

Ora sei sul dispositivo palmare, ma vuoi utilizzare l'istanza di sql server express che gira sul tuo PC, quindi la stringa di connessione che devi usare è la seguente :
in vb.net è
"Data Source=Mio-PC\SQLEXPRESS;Initial Catalog=DATABASE;Integrated Security=SSPI;User ID=Mio-PC\Utente;Password=Password;"
ed in C# dovrebbe essere così :
"Data Source=Mio-PC\\SQLEXPRESS;Initial Catalog=DATABASE;Integrated Security=SSPI;User ID=Mio-PC\\Utente;Password=Password"
(perchè in teoria il carattere \ in c# è un carattere particolare che precede alcune formattazioni, quindi per far uscire la barra singola nel codice devi usare la sequenza di escape \\)

dove i parametri sono rispettivamente :
Mio-PC\SQLEXPRESS che è l'istanza di sqlserver del tuo pc dove sta collegato il database
DATABASE è il nome che hai dato al database, non il file .mdf del database
Mio-PC\Utente è l'utente di windows che hai creato ed aggiunto tra gli utenti di sqlserver tramite l'interfaccia di management di SQL o tramite lo script che ti ho passato e ti riposto

>USE Master
>GO
>CREATE LOGIN [Mio-PC\Utente] FROM WINDOWS WITH DEFAULT_DATABASE=[DATABASE]
>GO


Questa è una funzione in c#, copiala e modifica i parametri

private void CacheDatabase()
{
SqlConnection CN = new SqlConnection("Data Source=Mio-PC\\SQLEXPRESS;Initial Catalog=DATABASE;Integrated Security=SSPI;User ID=Mio-PC\\Utente;Password=Password");
SqlCommand CMD = null;
SqlDataReader RST = null;
try
{
CN.Open();
CMD = new SqlCommand("SELECT * FROM TABELLA", CN);
RST = CMD.ExecuteReader();
while (RST.Read())
{
this.listView1.Items.Add(new ListViewItem(RST.GetString(0)));
}
CMD = null;
if (CN.State == ConnectionState.Open)
{
CN.Close();
}
}
catch (Exception ex)
{
MessageBox.Show("Errore!\n" + ex.Message);
}
}

Fammi sapere!

Se non riesci ti scrivo un progettino e te lo passo.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

La string connection
"Data Source=Mio-PC\SQLEXPRESS;Initial Catalog=DATABASE;Integrated Security=SSPI;User ID=Mio-PC\Utente;Password=Password;"
non funziona sempre il solito errore:

System.Data.SqlClient.SqlException: SqlException in System.Data.SqlClient.SqlConnection.OnError() in ....SqlInternalConnection.OnError...

Ho provato anche a collegarmi via wifi (pc e pda sono nella stessa rete wifi) con questa (con ip del pc su cui si trova sqlexpress):
Data Source=192.168.1.2,1433;Initial Catalog=database;User ID=user;Password=psw;Integrated Security=false"

è da lo stesso errore di sopra....

R3GM4ST3R Profilo | Junior Member

Puoi postare tutta l'eccezione che viene generata?
così è tutto abbastanza ambiguo!

Mi confermi che hai creato il nuovo utente da windows e gli hai dato i privilegi di accesso nel database?
Mi confermi che se apri explorer dal palmare quando è collegato al pc con active sync navighi senza problemi?

Attendo tue notizie!

Ciao
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

Questa è l'eccezione:
System.Data.SqlClient.SqlException: SqlException
in System.Data.SqlClient.SqlConnection.OnError()
in System.Data.SqlClient.SqlInternalConnection.OnError()
in System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
in System.Data.SqlClient.TdsParser.Connect()
in System.Data.SqlClient.SqlInternalConnection.OpenAndLogin()
in System.Data.SqlClient.SqlInternalConnection..ctor()
in System.Data.SqlClient.SqlConnection.Open()
in WM5Collaudo.Stazione_E..ctor()
in WM5Collaudo.Main.mStazioneE_Click()
in System.Windows.Forms.MenuItem.OnClick()
in System.Windows.Forms.Menu.ProcessMnuProc()
in System.Windows.Forms.Form.WnProc()
in System.Windows.Forms.Control._InternalWnProc()
in Microsoft.AGL.Forms.EVL.EnterMainLoop()
in System.Windows.Forms.Application.Run()
in WM5Collaudo.Program.Main()


L'utente di windows l'ho creato, aggiunto tra gli utenti del mio sql express nella sezione Protezione\Account di accesso e nella sezione Protezione\Utenti del db con tutti i privileggi di amministratore.
Per quanto riguarda il pda accedendo ad Explorer naviga in internet tramite wifi.

R3GM4ST3R Profilo | Junior Member

In teoria ho allegato un'immagine che visualizza i riferimenti da utilizzare nell'applicazione per palmari WINCE.
Verifica se i riferimenti sono corretti!
Sembra che non riesca nemmeno ad instanziare la connessione...

Prossimamente ti posterò un esempio di codice in vb.net che si connette al db e visualizza i database dell'sqlserver

Verifica i riferimenti

Ciao

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

Ci sono tutti i riferimenti tranne il primo OpenNETCF ? cos'è ?

Se riesci a convertire l'esempio in C# è meglio, altrimenti cercherò di farlo io.

R3GM4ST3R Profilo | Junior Member

Ciao, dai un occhio a queste pagine.
Li è spiegato per filo e per segno tutto quello che serve, ed c'è un esempio in c#

http://technet.microsoft.com/en-us/library/ms173281.aspx

http://community.opennetcf.com/articles/cf/archive/2007/09/20/developing-connected-smart-device-application-with-sqlclient.aspx

c'è pure un esempio da scaricare...

Provalo e fammi sapere!

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

La documentazione Microsoft l'avevo già vista.

Ho visto l'esempio, fatte le prime due fasi di configurazione del pc e poi utilizzato la connection string adattandola al mio caso, visto che l'esempio è fornito senza db. Non funziona neanche quella dell'esempio.

A questo punto mi chiedo se può essere un problema del pda, come posso verificare che il pda sia in grado di utilizzare la classe System.Data.SqlClient ?

R3GM4ST3R Profilo | Junior Member

Ho notato ora che nella stringa di connessione passi anche la porta a cui connettersi
>Data Source=192.168.1.2,>>>1433<<<;Initial Catalog=database;User ID=user;Password=psw;Integrated Security=false"
hai provato a ometterla?

Se non ti funziona nemmeno quell'esempio li, sicuramente è un problema sistemistico, legato alla configurazione del tuo PC, il PDA non ha firewall.
Non so, hai qualche applicazione strana tipo zonealarm o qualche altro software che possa bloccare l'accesso al PC?
Altra cosa, vedo che passi solo l'indirizzo IP, se stai usando la versione express, devi aggiungere \SQLExpress che sarebbe il nome istanza...

altre cose per ora non mi vengono in mente...
Interessante questa cosa...

Tienimi aggiornato...


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

Il pc non ha programmi strani, ha il firewall di windows ma ho già aggiunto l'eccezione di sql server e che l'istanza accetta qualsiasi tipo di connessione.

Sul pda cosa deve essere installato per garantire che interagisca con sql server express ?

R3GM4ST3R Profilo | Junior Member

Nulla di speciale il compact framework 3.5 e basta!
La classe sqlclient è propria del compact framework
Hai provato a disabilitare proprio il firewall di windows??


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

provato con il firewall disattivato ma non va.

Ho appena scoperto che il pda ha il .net Compact Framework 2.0 oltre a Sql client 2.0 e sql Mobile 2005.
E' necessario il 3.5 ? non c'è lo spazio sufficiente per installarlo...

R3GM4ST3R Profilo | Junior Member

Purtroppo ho provato solo con il Compact Framework 3.5 che è quello che usa il Visual Studio 2008 di default, cmq credo che anche con la versione 2.0 non ci siano problemi di sorta!
Anche perchè l'esempio di opennet framework (SSMS_Device) era scritto con 2005, quindi presumo che già con il CF2.0 tutto funziona!
Cmq torniamo per un secondo all'eccezione che ti genera il codice, se esegui il debug passo a passo, dove si inchioda??
Mi alleghi il codice che usi, così lo provo? (un po' di C# lo mastico)


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

Premetto uso VS2005 (ancora).

Si inchioda praticamente alla seconda istruzione della procedura.
string conn = "Data Source=................"; // stringa di connessione
SqlConnection CN = new SqlConnection(conn);
....

R3GM4ST3R Profilo | Junior Member

beh se si incastra li, ossia quando stai istanziando la connessione all'sql, probabilmente è errata la stringa di connessione con cui stai tentando di istanziare l'oggetto...
Praticamente se si incazza subito quando fai
>SqlConnection CN = new SqlConnection(#stringa#);
significa che l'errore si verifica quando stai istanziando l'oggetto (ma in realtà non c'è stata ancora connessione con il server), mi spiego meglio, non stai passando i parametri corretti all'oggetto connection, di conseguenza l'oggetto non viene creato e si genera eccezione...

Mi scrivi la stringa di connessione che usi, esattamente come la scrivi nel codice?


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

mi correggo non ci punta li ma sulla istruzione successiva (sulla chiamata della Open)..avevo visto male sul debug.
string conn = "................";
SqlConnection CN = new SqlConnection(conn);
SqlCommand CMD = null;
SqlDataReader RST = null;
try
{
CN.Open();
.....

R3GM4ST3R Profilo | Junior Member

Prova a usare quella stringa di connessione da una normalissima applicazione windows.

N.B. La stessa che usi per il palmare...

Fammi sapere...


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

Samb1985 Profilo | Junior Member

Connessione stabilita !!!

La connection string che va è la seguente:
"Data Source=192.168.1.2,1433;Initial Catalog=database.mdf;User ID=user;Password=psw;Integrated Security=false"

192.168.1.2 è il del pc del server sqlexpress
user e psw sono di un utente administrator che accede al database con l'autenticazione Sql Server (non windows)

Non capisco perchè è necessario mettere .mdf sul nome del db, ma senza non funziona.

Un grande ringraziamento a R3GM4ST3R.

R3GM4ST3R Profilo | Junior Member

Figata!
Bravo!

Sono contento!

Ignoro il motivo per cui devi mettere .mdf, proverò ad informarmi...



Alla prossima!


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)
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