select query不能使用Parameters.AddWithValue参数

时间:2015-08-25 05:50:06

标签: c# mysql

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没有返回任何结果,但当我向数据库查询时,我得到了数据。

2 个答案:

答案 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);

这对我来说更容易上班。但是请注意,与使用命令参数方法相比,我不确定它是否有任何特定的缺点。