Status changed to: Closed

Title: Parameter name and order of declaration
Bug Type: Software bug
Severity: Serious
Software Version: 0.7.1
Environment: Windows XP
PostgreSQL 8.0.4 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 

Description: Hello,
 I have come accross a problem using parameters in a query.
Here is a code extract:

NpgsqlConnection conn = new NpgsqlConnection("Server=;Port=5432;User 
NpgsqlCommand command = new NpgsqlCommand("select * from tablea where column1 = 
:AA and column2 = :A", conn);
command.Parameters.Add(new NpgsqlParameter("A", DbType.Int32));
command.Parameters.Add(new NpgsqlParameter("AA", DbType.Int32));

command.Parameters[0].Value = 4;
command.Parameters[1].Value = 5;

Declaring the parameter in this order ("A" then "AA") will raise the following 
exception :
Message: "Parameter :A not found in query."

Declaring them in the opposite order works without a glitch.

PS: here the relevant part of the stack trace for the exception:
at Npgsql.NpgsqlCommand.ReplaceParameterValue(String result, String 
parameterName, String paramVal)
at Npgsql.NpgsqlCommand.GetClearCommandText()
at Npgsql.NpgsqlCommand.GetCommandText()  
at Npgsql.NpgsqlQuery.WriteToStream(Stream outputStream, Encoding encoding)
at Npgsql.NpgsqlReadyState.Query(NpgsqlConnector context, NpgsqlCommand command)
at Npgsql.NpgsqlConnector.Query(NpgsqlCommand queryCommand)
at Npgsql.NpgsqlCommand.ExecuteCommand()
at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior cb)
at Npgsql.NpgsqlCommand.ExecuteReader()
at Npgsql.NpgsqlCommand.System.Data.IDbCommand.ExecuteReader()
at TestPgsql.TestPgsql.Main(String[] args)

Status: Closed

[EMAIL PROTECTED] : 11/02/2005
Hi ymh.

Would you mind to check if you are really using Npgsql 0.7.1? It is because we 
fixed this problem since 0.7beta6 with a new algorithm based on regexp.

Also, from your stack trace, GetClearCommandText is calling 
ReplaceParameterValue and this call was removed.

Another way to check if you are using 0.7.1 is enable logging, with 
                NpgsqlEventLog.Level = LogLevel.Debug;
                NpgsqlEventLog.LogName = "NpgsqlTests.LogFile";

and check if you see some string like that:
String written:

Which shows what Npgsql is writing to server.

Just one more thing: Please, use tracker at 
to report new bugs :)

Thanks in advance.

[EMAIL PROTECTED] : 11/03/2005
        Hello fxjrlists.

Indeed, thanks to your indications, I discovered that I was not using the 
version, but the 0.7.0.O (as read with ildasm), the one delivered with 
the installation of postgresql 8.0.4 for windows.

Everything was running fine once using the correct version.
Sorry for the inconvenience.


[EMAIL PROTECTED] : 11/04/2005
Hi Ymh.

No problem. It wasn't any inconvenience :)
I'm glad you got it working!

I think newer versions of Postgresql installer will come with latest Npgsql 

Thank you for your feedback.

Npgsql-hackers mailing list

Reply via email to