The following query in C# doesn't work, but I can't see the problem:
string Getquery = "select * from user_tbl where emp_id=@emp_id and birthdate=@birthdate";
cmdR.Parameters.AddWithValue("@emp_id", userValidate.emp_id);
cmdR.Parameters.AddWithValue("@birthdate", userValidate.birthdate);
OdbcCommand cmdR = new OdbcCommand(Getquery, conn);
OdbcDataReader Reader = cmdR.ExecuteReader();
Reader.HasRows
returns no result but when I query it to my database I got data.
I'll assume your code is actually not quite as presented, given that it wouldn't currently compile - you're using cmdR
before you declare it.
First, you're trying to use named parameters, and according to the documentation of OdbcCommand.Parameters
, that isn't supported:
When
CommandType
is set toText
, the .NET Framework Data Provider for ODBC does not support passing named parameters to an SQL statement or to a stored procedure called by anOdbcCommand
. In either of these cases, use the question mark (?
) placeholder.
Additionally, I would personally avoid using AddWithValue
anyway - I would use something like:
string sql = "select * from user_tbl where emp_id = ? and birthdate = ?";
using (var connection = new OdbcConnection(...))
{
connection.Open();
using (var command = new OdbcCommand(sql, connection))
{
command.Parameters.Add("@emp_id", OdbcType.Int).Value = userValidate.EmployeeId;
command.Parameters.Add("@birthdate", OdbcType.Date).Value = userValidate.BirthDate;
using (var reader = command.ExecuteReader())
{
// Use the reader here
}
}
}
This example uses names following .NET naming conventions, and demonstrates properly disposing of resources... as well as fixing the parameter issue.
I do think it's slightly unfortunate that you have to provide a name for the parameter when adding it to the command even though you can't use it in the query, but such is life.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With