Vous n'êtes pas identifié(e).
Pages : 1
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
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
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 ...
est ce bien cela qu'il fallait comprendre ?
Dernière modification par oldBoy (19/04/2010 21:22:47)
Hors ligne
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
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 !
Dernière modification par oldBoy (20/04/2010 22:16:07)
Hors ligne
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
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
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
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
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
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
Pages : 1