Problème d'insertion d'image dans la base oracle

Signaler
Messages postés
101
Date d'inscription
mercredi 5 novembre 2008
Statut
Membre
Dernière intervention
31 août 2009
-
Messages postés
118
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
6 décembre 2010
-
bonjour,

 je souhaite insérer des images dans la base de donnée oracle 10g express. Mais je crois que je n'arrive pas à gérer les blob. En fait, j'ouvre une fenêtre et je vais chercher le chemin pour l'enregistrer dans la base. Mais lorsque j'exécute le programme, " command.ExecuteNonQuery() " n'exécute pas la requête, je suppose que c'est dû au champs photoAdhérent.    Pourriez vous m'aider. Voici un bout du script:

  public void EnvoiAdhérent_Click(object sender, EventArgs e)
        {
            string sexe;
            string civilite;

            if (valFeminin.Checked = = true)
                sexe = "F";

            else
                sexe = "M";

            if (valMlle.Checked == true)
                civilite = "Mlle";

            else
                if (valMme.Checked == true)
                    civilite = "Mme";

                else
                    civilite = "Mr";
 

            Sql = "INSERT INTO adhérents ( nomAdhérent, prenomAdhérent, sexeAdhérent, civilitéAdhérent, DateNaissAdhérent, AdressAdhérent, ComplAdress, villesAdhérent, codePostalAdhérent, telFixeAdhérent, telPortAdhérent, photoAdhérent , numForfaitAdhérent, numNiveauAdhérent, numLicenceAdhérent) VALUES ('" +valNom.Text+ "','" +valPrenom.Text+ "','" +civilite+ "','" +sexe+ "','" +valNaiss.Text+ "','" +valAdresse.Text+ "','" +valComplAd.Text+ "','" +valVille.Text+ "','" +valCP.Text+ "','" +valTelPort.Text+ "','" +valTelFixe.Text+ "','" +valPhoto.Text+ "','" +valLicence.Text+ "','" +valForfait.Text+ "','" +valNiveau.Text+ "')";

            command = new OracleCommand(Sql, connect);
            command.CommandType = CommandType.Text;
            command.ExecuteNonQuery();

            MessageBox.Show("Votre adhérent à bien été enregistré");
           
        }

3 réponses

Messages postés
118
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
6 décembre 2010
1
euh la ta requete enregistre juste le chemin d'acces a ton image dans la bdd. Donc si c'est ca que tu veux faire, un champ varchar2 suffira amplement. le blob te permet d'enregistrer le fichier lui même dans la base et attend en entrée un tableau de byte (byte[]).
Si tu veux un peu d'inspiration regarde du coté de la msdn:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.filebytes(VS.80).aspx

Bien sur ce qui t'interesse ici c'est juste de récuperer le tableau de byte, ensuite tu n'as qu'a le passer dans ta requete.
Messages postés
101
Date d'inscription
mercredi 5 novembre 2008
Statut
Membre
Dernière intervention
31 août 2009

J'ai changé le champs photo par un varchar2 mais lorsque j'exécute le programme il me marque au niveau de command.ExecuteNonQuery();

il me marque l'erreur suivante:

ORA-01756: une chaîne entre apostrophes ne se termine pas correctement

J'attends votre aide.
Messages postés
118
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
6 décembre 2010
1
Hum est-ce que par hasard tu aurais un champ contenant un apostrophe dans une de tes variables (récupérées dans les textbox)?

Si oui il est fort probable que c'est du a cela. Normalement tu devrais faire des verifications sur tes champs avec de les inserer/requeter en base (cf prob d'injection sql).
Donc verifie qu'une de tes valeurs ne contiennent pas un apostrophe, si elles en contient il te faudrait encoder ta chaine lors de l'insertion pour eviter cela, mais le mieux a faire pour ne pas t'embeter trop dans ton cas serait je pense d'utiliser des requetes parametrées (google it!) ce qui donnerait un truc du genre:

cmd.CommandText = "SELECT UserId, UserEmail, UserName, UserSurname FROM UserInfo WHERE LangVersion=@lang";
cmd.Parameters.Add(new SqlParameter("@lang",TaTextbox.Text));

Ici c'est pour sql server mais je suppose que OracleParameter existe, et cmd est de type sqlcommand mais doit aussi avoir oraclecommand (je te laisse checker ca sur la msdn ^^)

sinon pour pas t'embeter a utiliser un oracleparameter tu peux passer par l'interface IdbParameter:

IDbparameter m_param = cmd.CreateParameter();
 param.Nom = "@UserId";
 param.dbTYpe = Dbtype.XXXX;
param.Value = TaTextbox.Text;

ca fait plus de code a ecrire car il faut le faire pour chaque parametre mais ca te garanti un meilleure sécurité et un paramétrage plus fin.