PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 18/04/2010 15:21:43

oldBoy
Membre

requêtes paramétrées asp.net

bonjour,
je suis actuellement en train de développer un site web en Asp.net, framework 3.5 et postgres 1.8.4.
La connexion avec postgres se fait très bien au travers d'un driver récupéré sur le site de postgres.
le problème est que lorsque j'essaie de passer des requêtes paramétrées celles ci ne passent pas.

int retour = -1;
            DbTransaction trans = null;
            try
            {
                // Ouverture Connexion
                CremecFactory myCremec = new CremecFactory();
                _myConnect = (DbConnection)myCremec.GetConnection();
                _myConnect.Open();
                trans = _myConnect.BeginTransaction();

                // Construction de la requete
                DbCommand sqlCmd = _myConnect.CreateCommand();
                sqlCmd.CommandType = CommandType.Text;
                sqlCmd.CommandText = "INSERT INTO nomtable (log_in, pass_word) VALUES ('@log_in', '@pass_word')";
                sqlCmd.Parameters.Add(new SqlParameter("@log_in", log_in));
                sqlCmd.Parameters.Add(new SqlParameter("@pass_word", pass_word));
                

                // Association cmd/transaction
                sqlCmd.Transaction = trans;
                sqlCmd.ExecuteNonQuery();
               
                // Retour ID ajouté
                
                DbCommand sqlCmdRet = _myConnect.CreateCommand();
                sqlCmdRet.CommandType = CommandType.Text;
                sqlCmdRet.CommandText = "select currval('nomtable_seq')";
                sqlCmdRet.Transaction = trans;
                
                Int64 res = (Int64)sqlCmdRet.ExecuteScalar();
                
                retour = (int)res ;
                 
                trans.Commit();

            }
            catch (Exception err)
            {

                if (trans != null)
                {
                    retour = -2;
                    trans.Rollback();
                    Trace.Write(err.Source);
                }
            }
            finally
            {
                try
                {
                    _myConnect.Close();
                }
                catch (Exception err)
                {


                }
            
            }
           
            return retour;

le même code en remplaçant

 sqlCmd.CommandText = "INSERT INTO nomtable (log_in, pass_word) VALUES ('@log_in', '@pass_word')";
                sqlCmd.Parameters.Add(new SqlParameter("@log_in", log_in));
                sqlCmd.Parameters.Add(new SqlParameter("@pass_word", pass_word));

par

sqlCmd.CommandText = "INSERT INTO nomtable (log_in, pass_word) VALUES ('" + log_in + "', '" + pass_word + "')";

marche sans souci mais il est sujet au injections SQL.

au fait le provider est : System.Data.Odbc

voilà en espérant avoir été clair et que les infos données vous permettront de cerner le problème.

Merci d'avance !

Hors ligne

#2 19/04/2010 07:53:16

dominikG
Membre

Re : requêtes paramétrées asp.net

Bonjour

Quel pilote utilisez vous pour accéder à PostgreSQL ?

S'il s'agit de Npgsql, les paramètres doivent être préfixés par : au lieu de @


Dominique

Hors ligne

#3 19/04/2010 21:21:24

oldBoy
Membre

Re : requêtes paramétrées asp.net

bonjour,
merci beaucoup pour ta réponse !
En fait j'ai essayé ta solution
j'ai remplacé :

sqlCmd.CommandText = "INSERT INTO nomtable (log_in, pass_word) VALUES ('@log_in', '@pass_word')";
                sqlCmd.Parameters.Add(new SqlParameter("@log_in", log_in));
                sqlCmd.Parameters.Add(new SqlParameter("@pass_word", pass_word));

par

sqlCmd.CommandText = "INSERT INTO nomtable (log_in, pass_word) VALUES (':log_in', ':pass_word')";
                sqlCmd.Parameters.Add(new SqlParameter(":log_in", log_in));
                sqlCmd.Parameters.Add(new SqlParameter(":pass_word", pass_word));

mais sans succès ... sad
est ce bien cela qu'il fallait comprendre ?

Dernière modification par oldBoy (19/04/2010 21:22:47)

Hors ligne

#4 19/04/2010 21:30:51

dominikG
Membre

Re : requêtes paramétrées asp.net

C'est presque cela.

Essaie sans mettre les : dans l'affectation des paramètres, ce qui devrait donner ce code :

sqlCmd.CommandText = "INSERT INTO nomtable (log_in, pass_word) VALUES (':log_in', ':pass_word')";
                sqlCmd.Parameters.Add(new SqlParameter("log_in", log_in));
                sqlCmd.Parameters.Add(new SqlParameter("pass_word", pass_word));

(Il faut les : quand on définit la requête, mais pas quand on affecte une valeur aux paramètres)

Hors ligne

#5 20/04/2010 22:15:40

oldBoy
Membre

Re : requêtes paramétrées asp.net

bonjour,
je l'ai essayé et ca ne marche toujours pas...
je ne suis pas sûr d'avoir le bon driver, peux tu me fournir le tien, peut être que le problème vient de là?

Merci encore une fois !
wink

Dernière modification par oldBoy (20/04/2010 22:16:07)

Hors ligne

#6 20/04/2010 23:39:53

dominikG
Membre

Re : requêtes paramétrées asp.net

Je n'avais pas fait attention, mais il y a peut être confusion entre deux familles de classes dans ton code

Il faudrait être sur d'utiliser les classes de npgsql, par exemple pour la déclaration de la commande :

NpgsqlCommand sqlCmd= new NpgsqlCommand(...

et NpgsqlParameter au lieu de SqlParameter.

En fait, sauf si tu as besoin d'utiliser en même temps un accès à SQL Server ou à une autre base de donnée, tu ne devrais avoir, pour l'accès aux données, que
using System.Data;
using Npgsql;


Dernier problème, il ne faut pas de ' ' dans le VALUES, et le code devrait ressembler à ceci :

sqlCmd.CommandText = "INSERT INTO nomtable (log_in, pass_word) VALUES (:log_in, :pass_word)";
                sqlCmd.Parameters.Add(new NpgsqlParameter("log_in", log_in));
                sqlCmd.Parameters.Add(new NpgsqlParameter("pass_word", pass_word));

J'ai fait mes essais avec Npgsql2.0.6

Hors ligne

#7 22/04/2010 01:18:36

oldBoy
Membre

Re : requêtes paramétrées asp.net

Bonjour !
voila en fait je ne sais pas quel driver est utilisé pour la connexion, car je n'ai pas le même que toi je pense?
Sais tu comment connaitre le driver qui est utilisé par hasard?
Sinon, pour le reste en effet il ya erreur sur les classes car les driver utilisent souvent leur propres classes pour se connecter !

Merci encore !!!
Bonne soirée!

Hors ligne

#8 22/04/2010 06:24:34

dominikG
Membre

Re : requêtes paramétrées asp.net

oldBoy a écrit :

Bonjour !
voila en fait je ne sais pas quel driver est utilisé pour la connexion, car je n'ai pas le même que toi je pense?
Sais tu comment connaitre le driver qui est utilisé par hasard?
Sinon, pour le reste en effet il ya erreur sur les classes car les driver utilisent souvent leur propres classes pour se connecter !

Merci encore !!!
Bonne soirée!

Quel pilote as tu téléchargé ?
Quel assembly références tu dans ton projet ?
Quelle instruction using emploies tu ?

Hors ligne

#9 26/04/2010 10:22:49

oldBoy
Membre

Re : requêtes paramétrées asp.net

Bonjour,
j'ai réussi à trouver le driver en question, il s'agit du psqlODBC, n'ayant pas réussi à trouver sa doc, je me suis décidé à utiliser npgsql, seulement voila  ce lui ci bloque ici

public NpgsqlConnection GetConnection2()
        {
            NpgsqlConnection conn = null;
            try
            {
               //ici il y a un problème, il ne trouve pas le fichier de la classe lors de l'éxecution
                conn = new NpgsqlConnection();

                conn.ConnectionString = "database=base;server=localhost;port=5432;uid=uid";
            }
            catch (NpgsqlException e)
            {
               
                conn = null;
            }
            return conn;
        }

j'ai pourtant ajouté toutes les dll au projet ???


Merci !!!!

Hors ligne

#10 26/04/2010 22:50:29

dominikG
Membre

Re : requêtes paramétrées asp.net

Cela devient une question de développement avec le framework .NET.

Je ne suis pas sur de bien comprendre ce que signifie "Il ne trouve pas le fichier de la classe", mais ton projet étant un projet ASP.NET, es tu bien sur de déployer la dll de npgsql sur le serveur IIS, au bon endroit ?

Hors ligne

#11 19/05/2010 10:57:28

oldBoy
Membre

Re : requêtes paramétrées asp.net

Bonjour,
désolé pour le retard de la réponse je reviens de vacances !
j'ai réussi finalement à le faire marcher en ajouter comme projet à la solution les sources de npgsql, la dll seule me sortait des erreurs... Donc pour l'instant tout marche bien et tout, seul bémol lors du déploiement ... le site est déployé suer un windows server 2003 avec framework 2.5 et malgré que je n'utilise pas les sources 3.5 au niveau des requêtes paramétrées il se passe un problème.
Je ne sais pas si tu as eu un cas semblable lors de ton déploiement avec npgsql ?
Merci !

Hors ligne

Pied de page des forums