Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2012, 12h02   #1
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 106
Points : 11
Points : 11
Par défaut comment vérifier l’existence d'une valeur dans une bd sql server

bonjour à tous,
je commence d'apprendre à développer en c#,
j'utilise le sql server.
j'ai une table User contenant login, pass word
j'ai une interface pour la saisie de param de connexion.
je veut vérifier lors de saisie de ces deux param, en cliquant sur le bouton "valider", l'existence dans la bd
voici mon code de test
Code :
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
private void valider_Click(object sender, EventArgs e)
        {
 
            try
            {
                LocalDataSet dataSet = new LocalDataSet();
                UserTableAdapter adapter = new UserTableAdapter();
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "select login from adapter where login=log and password=motpasse";
 
                IDataReader reader = cmd.ExecuteReader();
 
 
               IF (reader.GetName(0)=NULL)
                {
MessageBox.SHOW("Login et mot de passe invalide, SVP saisir de nouveau", "erreur de saisie", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
Interface_Menu myForm3 = new Interface_Menu();
                    myForm3.SHOW();
                }
            }
            catch (Exception ex)
            {
            }            
        }
le problème et que je n'arrive pas à vérifier l'existence du login et mot passe taper par la méthode de reader de l'objet idatareader,
je veut avoir une méthode plus claire qui me permet de manipuler plus vite et plus simple les données (comme par exemple l'existence d'une valeur dans la bd)
merci d'avance pour toute aide.
oumay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 12h58   #2
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 470
Points : 2 470
Envoyer un message via Yahoo à zinzineti
on ne voit pas dans le code que tu montres la connexion à la base de données.
il manque donc quelque chose du genre :

Code :
1
2
3
4
// instanciation et connexion à la base de donnée
 
SqlConnection cnx = new SqlConnection(@"Data Source=ZINZINDOHOUE\SQL2008R2;User Id=mylogin;Password=myPWD;Initial Catalog=MaBase"); 
cnx.Open();
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 15h19   #3
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 106
Points : 11
Points : 11
j'utilise dataset et dataadapter, donc la cx se fait automatiquement.
oumay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 16h32   #4
Candidat au titre de Membre du Club
 
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 10
Points : 10
Je pense qu'il vaut mieux que tu utilises ExecuteScalar au lieu de ExecuteReader.

Ca va te retourner une seule valeur dont tu pourras vérifier la nullité.
Renaud58 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 15h38   #5
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 106
Points : 11
Points : 11
merci pour l'aide
j'ai utilisée executescalar(), mais le problème et qu'il me demande de se connecter à la bd, tandis que j'ai bien préciser les paramétres de cx
qui sont :
Code :
DATA Source=ALIS\SQLEXPRESS;Initial Catalog=MN_Recouvrement;Integrated Security=True
il m'indique l'erreur suivant : ExecuteScalar: Connection property has not been initialized.
à cause de la ligne suivante : Data Source=ALIS\SQLEXPRESS
(unrecognized escape sequence.)
Code :
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
35
36
37
38
39
40
41
42
public partial class Interface_Accueil : Form
    {
 
        DataSet ds = new DataSet();
        SqlConnection cx=new SqlConnection("Data Source=EMNA\SQLEXPRESS;Initial Catalog=MN_Recouvrement;Integrated Security=True");
        SqlDataAdapter da= new SqlDataAdapter();
 
        private DataGrid gridInfo = new DataGrid();// charger le résultat dans une grille dans un formulaire
        public Interface_Accueil()
        {
            InitializeComponent();
        }
 
        private void InterfaceAccueil_Load(object sender, EventArgs e)
        {
 
        }
 
 
 
        private void valider_Click(object sender, EventArgs e)
        {
                //LocalDataSet dataSet = new LocalDataSet();
                UserTableAdapter adapter = new UserTableAdapter();
                DataTable TUser = adapter.GetData();
                SqlCommand cmd = new SqlCommand("select * from TUser where Login=log and PassWord=motpasse");
                Int32 result = (Int32)cmd.ExecuteScalar();
                IF (result == 0)
                {
                    d1.DataSource = TUser;
                    MessageBox.SHOW("Login et mot de passe invalide, SVP saisir de nouveau", "erreur de saisie", MessageBoxButtons.OK, MessageBoxIcon.Error);
 
                }
            else
                {
                    Interface_Menu myForm3 = new Interface_Menu();
                    myForm3.SHOW();
                }  
 
          //d1.DataSource = GetUser();
 
        }
je n'arrive pas à corriger le problème puisque je suis débutante dans cette matière, merci pour toute aide
oumay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 16h47   #6
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 670
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 670
Points : 8 732
Points : 8 732
Bonjour,

Faites simple : créez une procédure stockée !

Supposons que vous avez la table suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE dbo.TUser
(
	TUser_id smallint identity NOT NULL CONSTRAINT PK_TUser PRIMARY KEY
	, Login varchar(128) NOT NULL CONSTRAINT UQ_TUser__Login UNIQUE
	, PassWord varchar(128) NOT NULL
)
GO
 
INSERT	INTO dbo.TUser
(
	Login
	, PassWord
)
VALUES
(
	'oumay'
	, '123abc'
)
GO
La procédure stockée est :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE PROCEDURE usp_check_login
	@_user_name varchar(128)
	, @_password varchar(128)
	, @__ok bit OUTPUT
AS
BEGIN
	SET NOCOUNT ON
 
	IF EXISTS
	(
		SELECT	*
		FROM	dbo.TUser
		WHERE	Login = @_user_name
		AND	PassWord = @_password
	)
	BEGIN
		SET @__ok = 1
	END
END
Et voici une approximation du code C# à utiliser (je suis profane aussi )

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SqlCommand cmd = new SqlCommand("usp_check_login", cx);
cmd.CommandType = CommandType.StoredProcedure;
 
SqlParameter login = new SqlParameter("@_user_name",SqlDbType.VarChar);
login.Size=128; 
login.Value = log;
login.Direction = ParameterDirection.Input ; 
cmd.Parameters.ADD(login);
 
SqlParameter password = new SqlParameter("@_password",SqlDbType.VarChar);
password.Size=128; 
password.Value = PassWord;
password.Direction = ParameterDirection.Input ; 
cmd.Parameters.ADD(password); 
 
SqlParameter login_ok = new SqlParameter("@__ok",SqlDbType.Bit); 
login_ok.Direction = ParameterDirection.Output;
login_ok.Value = false;
cmd.Parameters.ADD(login_ok); 
 
cx.Open(); 
cmd.ExecuteNonQuery();
cx.Close();
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h50.


 
 
 
 
Partenaires

Hébergement Web