Salut à tous !!
Voilà, je développe depuis peu de temps sous Visual studio .net 2003 (à la base, je ne suis pas développeur, mais il faut bien un début à tout).
Je vais essayer d'être clair et bref.
Il s'agit d'une application en C# sur Pocket PC (tournant sous Windows 2003 SE) qui doit permettre d'enregistrer des données dans une base de données SQL. Cette base tourne sous SQL Server 2000 (édition standard), installé dans un XP Pro.
1er problème (qui n'est peut-être pas si important que ça) : SQL Server 2000 est destiné aux systèmes serveurs du type Win 2000 server. Donc je ne peux installer que les composants clients sur mon XP pro.
Bon, j'ai quand même installé SQL server et ma petite base, et fait mon appli.
On y reviendra.
2ème problème : Quand je lance mon appli C# sur un PDA, je ne peux pas accéder à la base SQL. Au chargement du 1er formulaire, je suis censé récupérer des données (noms d'opérateurs) de la base pour remplir une comboBox nommée cb_nom, mais a connexion ne se fait pas.
Voici un petit bout du code :
La gestion d'erreur me renvoie le message d'exception suivant : "SQL server n'existe pas ou l'accès est refusé".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 private void frm_operateur_Load(object sender, System.EventArgs e) { SqlConnection cnx; cnx = new SqlConnection(); cnx.ConnectionString = "UID=asp;PWD=asppwd;Database=bdd_habillage_operateur;server=etiquetage;Timeout=9"; cb_nom.Items.Clear(); try { SqlCommand cmd = new SqlCommand("SELECT num, nom FROM OPERATEUR" , cnx); cnx.Open(); SqlDataAdapter ada = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); ada.Fill(ds); // Remplissage de la liste opérateurs. foreach (DataRow row in ds.Tables[0].Rows) cb_nom.DataSource = ds.Tables[0]; cb_nom.ValueMember= "num"; //La liste garde en mémoire le numéro opérateur cb_nom.DisplayMember= "nom"; // Et affiche le nom. } catch (InvalidOperationException ex) {MessageBox.Show(ex.Message);} catch (SqlException ex) {MessageBox.Show(ex.Message);} catch (Exception ex) {MessageBox.Show(ex.Message);} finally {cnx.Close();} }
Ce qui est bizarre, c'est que ce code fonctionne très bien lorsque la base est sur le PC sur lequel je développe (ce n'est pas lui qui est destiné à recevoir la base) : le PDA se conecte à mon PC, mais pas au PC nommé Etiquetage qui a la base SQL Server 2000 installé en client.
C'est là que vous me dîtes que c'est normal, le PC Etiquetage est un XP Pro qui ne possède pas les composants serveurs de SQL Server 2000.
Et ben c'est pas fini.
J'ai fait un petit test avec une mini appli en VB qui depuis mon PC perso doit se connecter, de la même façon que devrait le faire le PDA, au PC Etiquetage.
Et ben la, ça marche !
Voici un petit bout de code :
Le résultat de la requête s'effectue correctement et me renvoie le bon résultat, qu'elle est allé chercher dans la bonne base...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim cnx As SqlConnection Dim cmd As SqlCommand Dim reader As SqlDataReader cnx = New SqlConnection("UID=asp;PWD=asppwd;Database=bdd_habillage_operateur;server=ETIQUETAGE;Timeout=9") cnx.Open() cmd = cnx.CreateCommand() cmd.CommandText = "SELECT DISTINCT Max(MILLESIME) FROM ORDREFAB" reader = cmd.ExecuteReader() reader.Read() MsgBox(reader.GetInt16(0)) reader.Close() End Sub
Et là, je ne comprend pas d'où vient le 2ème problème ("SQL server n'existe pas ou l'accès est refusé")
Le code semble bon (j'en suis pas sûr, vu que je débute en C#), la connection string est la même...
Quelqu'un aurait-il une petite idée, ou une piste ?
Merci d'avance
Partager