Logo du forum
 

Forum TTH-News

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [C / C++ / C#] » Requete sur une base de données SQL Server avec une appli en C# [Résolu]
Login Mot de passe

2 visiteurs sur ce topic (0 membre(s), 2 invité(s) )


Auteur
Sujet : Requete sur une base de données SQL Server avec une appli en C# [Résolu]
Keanu
Vétéran
Membre # 4886

 Avatar du membre
Lieu : Sart-Eustache (Fosse-la-ville) - Belgique

Messages :
2034 (0.37 par jour)




Message du 11-07-2008 @ 10:26      Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


Salut tous le monde,

Je fais une petite mise en situation:

Je développe une application en C#.
Au début, j'utilisai une DB en Access, pas de problème à signaler.
J'ai décidé de changer de DB et de passer en SQL Server 2005 Express Edition.
Mais voila que ce qui fonctionnait avec access ne passe pas avec SQL Server

Voici un exemple de code d'une recherche d'un nom dans la DB (pSearch est passé en paramètre, Connex.Connect() s'occupe de l'ouverture de connexion) :

Code :


Connex.Connect(m_ADONetConnection);
m_Search.SelectCommand = new OleDbCommand();
m_Search.SelectCommand.Connection = m_ADONetConnection;
m_Search.SelectCommand.Parameters.Add("@Name", OleDbType.VarChar);
m_Search.SelectCommand.Parameters["@Name"].Value = '%' + pSearch + '%';
m_Search.SelectCommand.CommandText = "SELECT * FROM Clients WHERE NomClient LIKE @Name AND TypeClient='P'";
m_Search.Fill(TClients);



Et à l'execution, j'ai ceci :

Must declare the scalar variable "@Name".

Le même code avec la DB en Access fonctionne sans prob.

Je suis débutant avec SQL Server alors, si vous avez une idée ?

Merci



[message édité le 13-07-2008 @ 16:38 Par Keanu]
----------
Laptop : Asus K53 I5-2410M - 8Go - 500Go - DVD+-RW - 15,6 - Win7HP
Desktop : En attente ;)
- Haut de page -
Keanu
Vétéran
Membre # 4886

 Avatar du membre
Lieu : Sart-Eustache (Fosse-la-ville) - Belgique

Messages :
2034 (0.37 par jour)




Message du 11-07-2008 @ 14:18   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Déjà, il me manque des quotes autour de @Name dans la requete.

En ajoutant ça, je n'ai plus l'erreur mais je n'ai aucun résultat (vide) qui m'est retourné par la requete...
----------
Laptop : Asus K53 I5-2410M - 8Go - 500Go - DVD+-RW - 15,6 - Win7HP
Desktop : En attente ;)
- Haut de page -
DavD
Vétéran
Membre # 14922

 Avatar du membre
Lieu : Bxl

Messages :
2283 (0.47 par jour)


Score :

Message du 11-07-2008 @ 15:17   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Il est possible de simplifier un peu la chose je pense :

Code :

m_Search.SelectCommand.Parameters.Add("@Name", OleDbType.VarChar);
m_Search.SelectCommand.Parameters["@Name"].Value = '%' + pSearch + '%';
m_Search.SelectCommand.CommandText = "SELECT * FROM Clients WHERE NomClient LIKE @Name AND TypeClient='P'";



=>

Code :


m_Search.SelectCommand.CommandText = "SELECT * FROM Clients WHERE NomClient LIKE '%" + pSearch + "%' AND TypeClient='P'";




----------
Dev/taf Macbook Pro 15 Retina
Fixe Intel i7 2600k, 570 GTX, crucial M4 ...
"Le mieux est l'ennemi du bien"
- Haut de page -
Keanu
Vétéran
Membre # 4886

 Avatar du membre
Lieu : Sart-Eustache (Fosse-la-ville) - Belgique

Messages :
2034 (0.37 par jour)




Message du 11-07-2008 @ 21:56   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

oui mais si j'ai bien compris ce que l'on m'a expliqué, le fait de faire via un parametre et de faire OleDbType.VarChar, permet de vérifier les données que l'on va utiliser, afin d'éviter des prob de données incompatible ou d'attaque de DB

Et effectivement, si je fais comme tu l'indiques, cela fonctionne
----------
Laptop : Asus K53 I5-2410M - 8Go - 500Go - DVD+-RW - 15,6 - Win7HP
Desktop : En attente ;)
- Haut de page -
Keanu
Vétéran
Membre # 4886

 Avatar du membre
Lieu : Sart-Eustache (Fosse-la-ville) - Belgique

Messages :
2034 (0.37 par jour)




Message du 13-07-2008 @ 15:04   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

alors, a la place du Like @Name, je mets : m_Search.SelectCommand.Parameters["@Name"].Value

dans ce cas là, ça fonctionne.

Mais dans d'autres cas, ça ne fonctionne pas, exemple :

Code :


Connex.Connect(m_ADONetConnection);
m_Search.SelectCommand = new OleDbCommand();
m_Search.SelectCommand.Connection = m_ADONetConnection;
m_Search.SelectCommand.Parameters.Add("@id", OleDbType.VarChar);
m_Search.SelectCommand.Parameters["@id"].Value = pId;
m_Search.SelectCommand.CommandText = "SELECT * FROM Clients WHERE N°IDClient='" + m_Search.SelectCommand.Parameters["@id"].Value + "'";
m_Search.Fill(TClients);



N°IDClient est une clé primaire, si ça peut aider...

dans ce cas, j'ai comme message : "Incorrect syntax near '°'. " Sur la ligne "m_Search.Fill(TClients);"

si qlq a une idée ?

MErci


----------
Laptop : Asus K53 I5-2410M - 8Go - 500Go - DVD+-RW - 15,6 - Win7HP
Desktop : En attente ;)
- Haut de page -
Keanu
Vétéran
Membre # 4886

 Avatar du membre
Lieu : Sart-Eustache (Fosse-la-ville) - Belgique

Messages :
2034 (0.37 par jour)




Message du 13-07-2008 @ 16:38   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Pour finir, la base de données SQL n'accèpte pas le caractère °
----------
Laptop : Asus K53 I5-2410M - 8Go - 500Go - DVD+-RW - 15,6 - Win7HP
Desktop : En attente ;)
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2010

Valid XHTML 1.0 Transitional

Page générée en 0.028 secondes