Giorgi / DuckDB.NET

Bindings and ADO.NET Provider for DuckDB
https://duckdb.net
MIT License
405 stars 68 forks source link

Parameters problem #195

Closed LR-develop closed 3 months ago

LR-develop commented 3 months ago

Hi, I'm experiencing this issue: I have seen on documentation that parameters must be used such as

command.CommandText = "SELECT * FROM person WHERE starts_with(name, $name_start_letter) AND age >= $minimum_age;";
command.Parameters.Add(new DuckDBParameter("minimum_age", 40));
command.Parameters.Add(new DuckDBParameter("name_start_letter", "B"));

The problem is that if parameter names are used somewhere in the query, there are unexpected results. For example:

command.CommandText = "SELECT * FROM person WHERE starts_with(name, $name_start_letter) AND age >= $age;";
command.Parameters.Add(new DuckDBParameter("age", 40));
command.Parameters.Add(new DuckDBParameter("name_start_letter", "B"));

That's why command.Parameters are required in other ado.net libraries (I have tried with oracle, sqlserver, postgres) to be added with a prefix, like:

command.Parameters.Add(new DuckDBParameter("@age", 40));
command.Parameters.Add(new DuckDBParameter("@name_start_letter", "B"));

In this case there are no ambiguities. Is it possible to have the same behaviour? Thanks

Giorgi commented 3 months ago

What unexpected results do you get? Can you share a repro with some sample data to make it easier for me to investigate?

LR-develop commented 3 months ago

I'm sorry, it was an sql bug of an old version of duckdb.dll, which has been solved.