CleemS
Messages postés19Date d'inscriptionvendredi 4 janvier 2008StatutMembreDernière intervention10 juin 2008
-
4 janv. 2008 à 18:55
marwa58
Messages postés3Date d'inscriptionmercredi 12 mai 2010StatutMembreDernière intervention 1 décembre 2010
-
5 juin 2010 à 03:29
Salut à tous :)
Alors voilà mon problème, je crois que j'ai à peu près réussi à lier ma BDD (SQL Server) à mon programme (Visual C# 2008 Express) avec ce code :
using System.Data.Common;
using System.Configuration;
Voilà, déjà manque-t'il quelque chose?
Ensuite, j'ai réussi à enregistrer un nouveau film (vidéothèque :p) entré par l'utilisateur (Titre, durée, genre & avis) avec ce code :
Film F1 = new Film(textBox1.Text, textBox2.Text, comboBox1.Text, comboBox2.Text);
Mais maintenant voilà, j'aimerais enregistrer ce film F1 dans ma table 'Film' de ma BDD. Comment faire? Requête SQL?
Le problème est que je ne sais pas comment et avec quoi créer et lancer ma requête.
Merci d'avance,
CleemS!
A voir également:
Format of the initialization string does not conform to specification starting at index 0
CleemS
Messages postés19Date d'inscriptionvendredi 4 janvier 2008StatutMembreDernière intervention10 juin 20085 5 janv. 2008 à 14:05
Je te remercie beaucoup, sa me permet d'avancer ^^
Seulement voilà, mon programme n'apprécie pas trop certaines commandes apparemment, voici ton code que j'ai modifié :
IDbCommand command = new IDbCommand();
command.commandtext = "INSERT INTO Film(Titre, Duree, Genre, Avis, Affiche) VALUES('"+F1.GetTitre()+"','"+F1.GetDuree()+"','"+F1.GetGenre()+"','"+F1.GetAvis()+"','"+F1.GetAffiche()+"')";
command = dbconn.CreateCommand();
command.ExecuteNonQuerry();
Mais il y a des erreurs sur ce que j'ai souligné, pour la 1ère c'est : "Cannot create an instance of the abstract class or interface 'System.Data.IDbCommand'"...
public film(string nom_film, string genre_film, string auteur_film)
{
this.m_nom_film = nom_film;
this.m_genre_film = genre_film;
this.m_auteur_film = auteur_film;
}
// le faire 3 fois pour tous les membres privés => on aura nom, genre et auteur
public string nom
{
Get{return this.m_nom_film;}
}
Donc, si tu veux enregistrer ton film dans ta table, il te faudra faire une requête d'insertion. Ici je vais faire une requête INSERT dans un 'IDbCommand' avec ce que je pense être ton constructeur de ta classe film. Supposons aussi que les noms des colonnes de ta table 'Film' soient : nomdufilm, genredufilm et auteurdufilm, la requêtes sera du style :
IDbCommand command = new IDbCommand(); (je peux me tromper pour ca mais essaie)
command.commandtext = "INSERT INTO Film(nomdufilm,genredufilm,auteurdufilm) VALUES('"+F1.nom+"','"+F1.genre+"','"F1.auteur')";
command = dbconn.CreateCommand();
command.ExecuteNonQuerry();
Et voila, je pense que c'est à ca que ca doit ressembler, regarde si ca va correctement, il y a peut-être quelques fautes car j'utilise une autre méthode un peu plus simple. Tu peux aussi utiliser des bloc Try Catch pour voir si il y a des erreurs et voir où sont les erreurs.
CleemS
Messages postés19Date d'inscriptionvendredi 4 janvier 2008StatutMembreDernière intervention10 juin 20085 6 janv. 2008 à 03:44
Re Jisay, merci beaucoup sa m'a bien fait avancer, mais sa me génère encore une petite erreur, sa doit venir de la propriété 'ConnectionString' de mon SqlConnection, je n'ai pas trop compris quoi mettre dans le champ, et quoique je mette il me dit :
"Format of the initialization string does not conform to specification starting at index 0."
Le grand Jisay
Messages postés100Date d'inscriptionmardi 8 mai 2007StatutMembreDernière intervention18 février 20112 6 janv. 2008 à 10:59
Oui, c'est un peu compliqué le format de ConnectionString.
Quand tu as ajouté ton SqlConnection à ta Form, dans la propriété ConnectionString, tu cliques bien sur la flèche tout à droite ? Là il faut choisir nouvelle connexion, puis parcourir et tu vas sur parcourir et tu vas chercher ta base de données SQL qui se trouve sur ton disque dur et normalement Visual Studio te génère tout seul comme un grand la ConnectionString.
Tu peux aussi ajouter ta base de données à ta solution. Je m'explique : dans ton explorateur de solution (sous Visual Studio) tu clique droit sur le nom de ton projet, ensuite Ajouter\Un élément existant et là tu vas chercher ta base de données SQL sur ton disque dur. Ensuite, si tu fais comme ca ou si c déjà comme ca que tu as procédé pour ta base de données, tu vas dans les propriétés de ta ConnectionString, clic sur la flèche à droite et au dessus de 'Nouvelle Connexion', tu choisis la base de données que tu as importée a ton projet.
Voila je pense avoir bien expliqué, je n'ai jamais eu cette erreur donc je ne sais pas trop si ca vient de la mais bon, ca c'est la bonne technique.
A+, Le Grand Jisay
Vous n’avez pas trouvé la réponse que vous recherchez ?
CleemS
Messages postés19Date d'inscriptionvendredi 4 janvier 2008StatutMembreDernière intervention10 juin 20085 6 janv. 2008 à 15:57
Je crois avoir résolu le problème, j'ai mis : "Data Source=C:\Program Files\Microsoft SQL Server\MSSQL\Data\DivX_Data.MDF" dans la ConnectionString, et il accepte ce type de ligne.
Malheureusement j'ai encore une erreur lors de l'ajout d'un Film : "There is a file sharing violation. A different process might be using
the file. [ C:\Program Files\Microsoft SQL
Server\MSSQL\Data\DivX_Data.MDF ]".
Etrange car à part SQL Server et mon programme, rien n'utilise ma BDD, et si je la désactive sa ne marche pas non plus... Etrange je ne comprends pas. =/
Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;
Avec mot de passe
Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;
De plus, faites attention tout les deux. UTILISEZ DES REQUÊTES PARAMÉTRÉES !!!!!C'est une question de sécurité, mais aussi de simplification de ton code.
La moitié des questions portant sur une requête qui marche mal vient de problème qui n'existerait pas si on utilise des requêtes paramétrées.
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Le grand Jisay
Messages postés100Date d'inscriptionmardi 8 mai 2007StatutMembreDernière intervention18 février 20112 7 janv. 2008 à 09:45
Salut SharpMao,
Je procède rarement avec des requêtes paramétrées, néanmoins je sais les utiliser. J'utilise de préférence les procédures stockées mais j'ai commencer par expliquer simplement les requêtes SQL à Cleems car apparement, il n'en a pas encore beaucoup fait.
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 7 janv. 2008 à 13:25
Salut à toi aussi,
Quand je parle de requêtes paramétrées, j'inclue les procédures stockées.
Ce que je veux éviter, c'est de mettre des valeurs sous forme de string dans une requête, quel que soit le type de la requête.
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
marwa58
Messages postés3Date d'inscriptionmercredi 12 mai 2010StatutMembreDernière intervention 1 décembre 20101 5 juin 2010 à 03:29
slt
jé fé une application etudina jé fé la classe cnx et classe etudiant et le formulaire
quand je fai j'execute le prog il ya un erreur qui se produit quand je click sur le bouton ajouter
voila le code
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Data;
namespace WindowsApplication2
{
class etudiant
{
private int _matricule;
private string _nom;
private string _prenom;
private string _adresse;
private int _cin;
public etudiant(int matricule, string nom, string prenom, string adresse, int cin)
{
this._matricule = matricule;
this._nom = nom;
this._prenom = prenom;
this._adresse = adresse;
this._cin = cin;
}
public int matricule
{
get { return _matricule; }
set { _matricule = value; }
}
public string nom
{
get { return _nom; }
set { _nom = value; }
}
public string prenom
{
get { return _prenom; }
set { _prenom = value; }
}
public string adresse
{
get { return _adresse; }
set { _adresse = value; }
}
public int cin
{
get { return _cin; }
set { _cin = value; }
}
public void inserer()
{
}
public void supprimer()
{
string req "delete from etudiant where matricule" + _matricule;
OleDbCommand cmdsupp = new OleDbCommand(req, connexion.cn);
cmdsupp.ExecuteNonQuery();
}
public static DataTable recherche_nom(string nom)
{
DataTable dtcl = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("select*from etudiant where nomcl like '" + nom + "%'", connexion.cn);
da.Fill(dtcl);
return dtcl;
}
public static DataTable recherche_num(int num)
{
DataTable dtcl = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("select*from etudiant where matricule=" + num.ToString(), connexion.cn);
da.Fill(dtcl);
return dtcl;
}
public static DataTable charger_liste()
{
DataTable dtcl = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("select*from etudiant", connexion.cn);
da.Fill(dtcl);
return dtcl;
}
public void maj()
{
string req = "update etudiant set nom='" + _nom + "',prenom='" + _prenom + "',adresse='" + _adresse + "',cin=" + _cin + " where matricule =" + _matricule;
OleDbCommand cmdmaj = new OleDbCommand(req, connexion.cn);
cmdmaj.ExecuteNonQuery();
}
}
}
un message s'affiche"l'exeption OleDbExeption n'a pas été gerer
merci
Le grand Jisay
Messages postés100Date d'inscriptionmardi 8 mai 2007StatutMembreDernière intervention18 février 20112 5 janv. 2008 à 17:06
Re,
Je ne vois pas trop, tu pourrais me dire avec quelle type de base de données tu travailles ? ACCESS, SQL, ORACLE,... ?
Et aussi avec quel logiciels tu programmes, Visual Studio je suppose, mais 2003 ou 2005 ?
Si tu travailles avec Visual Studio 2005, la manipulation de données est plus simple mais si tu es toujours en 2003, je t'expliquerai avec l'ancienne méthode...
Le grand Jisay
Messages postés100Date d'inscriptionmardi 8 mai 2007StatutMembreDernière intervention18 février 20112 5 janv. 2008 à 17:28
Ok ok je vois, j'avais oublié que cette version était sortie
Pour que ça soit plus simple, utilise l'espace de noms : System.Data.SqlClient
Maintenant pour ta requête, je te donne la marche a suivre :
- sur ta Form, tu ajoutes (à partir de la boite à outils) un objet de type SqlConnection (si c'est pas dans la boite à outils, tu ajoutes en cliquant droit dans la boite puis choisir les éléments). Tu modifies la propriété : 'ConnectionString' c'est-à-dire ta base de données Films. Ne change pas son nom, ça doit être SqlConnection1.
- tu ajoute de la même façon un objet de type sqlcommand. Tu modifies la propriété : Connection tu mets SqlConnection1. Ne change pas son nom non plus.
- Voila maintenant tu as créé tes objets pour pouvoir faire ta requête, maintenant dans ton code tu y places :
CleemS
Messages postés19Date d'inscriptionvendredi 4 janvier 2008StatutMembreDernière intervention10 juin 20085 6 janv. 2008 à 15:35
Je te remercie pour ces explications, mais je n'ai pas de petite flèche à droite de 'ConnectionString', j'ai bien ajouté ma BDD en cliquant droit sur mon projet > Add > Existing Item, je suis aller chercher ma BDD... Mais sa ne me fournit pas la ligne (ni la flèche pour chercher sa) a ma ConnectionString.
Cependant, sur mon SqlConnection1, je suis aller voir dans Application Settings > Property Bindings (là y'a trois petits points du genre parcourir) > ConnectionString (la revoilà :p). Là j'ai bien une petite flèche, mais quand je choisi "DivX_DataConnectionString" (DivX étant le nom de ma BDD) il me génère une erreur :
"Object of type 'Microsoft.VSDesigner.VSDesignerPackage.SerializableConnectionString' cannot be converted to type 'System.String'."
Donc je vois pas, car même en allant chercher le DataSet qu'il me propose, il veut pas...