C#中的以下查询无效,但我无法看到问题:
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
没有返回任何结果,但当我向数据库查询时,我得到了数据。
答案 0 :(得分:5)
我假设您的代码实际上并非完全,因为它目前无法编译 - 您在宣布之前使用cmdR
它
首先,您尝试使用命名参数,并且根据OdbcCommand.Parameters
的文档,不支持:
当
CommandType
设置为Text
时,.NET Framework数据提供程序for ODBC不支持将命名参数传递给SQL语句或OdbcCommand
调用的存储过程。在其中任何一种情况下,请使用问号(?
)占位符。
此外,我个人会避免使用AddWithValue
- 我会使用类似的东西:
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
}
}
}
此示例使用遵循.NET命名约定的名称,并演示正确处理资源...以及修复参数问题。
我确实认为,即使您无法在查询中使用该参数,也必须在将参数添加到命令时提供参数名称,但这样才有可能。但这就是生命。
答案 1 :(得分:0)
我知道这个线程很旧,但是我想与其他任何人分享我的解决方案。
我对乔恩发布的典型方法有疑问。我以前使用过它,但是由于这个新字符串的某些原因,我不想真正正确地放置参数,并导致阅读器无法正常工作。
我最终做了这样的事情,因为最后我们只是替换了字符串的一部分。
string sql = "select * from user_tbl where emp_id = "+ var1 +" and birthdate = "+
var2""
OdbcCommand command = new OdbcCommand(sql);
这对我来说更容易上班。但是请注意,与使用命令参数方法相比,我不确定它是否有任何特定的缺点。