C# 为什么这个简洁的查询返回null?

C# 为什么这个简洁的查询返回null?,c#,mysql,asp.net-mvc-3,dapper,C#,Mysql,Asp.net Mvc 3,Dapper,我有一个mysql语句,我正在传递给dapper查询方法,它返回一个空对象。我已经创建了一个POCO类来保存返回的结果。我直接通过一个sql编辑器测试了查询,它返回了一个结果。代码如下: public ViewEmail GetViewEmail(string xId, int headerId) { using (IDbConnection connection = new MySqlConnection(_connectionString)) { string

我有一个mysql语句,我正在传递给dapper查询方法,它返回一个空对象。我已经创建了一个POCO类来保存返回的结果。我直接通过一个sql编辑器测试了查询,它返回了一个结果。代码如下:

public ViewEmail GetViewEmail(string xId, int headerId)
{
    using (IDbConnection connection = new MySqlConnection(_connectionString))
    {
        string sql = "SELECT * FROM ViewEmail " +
                     "WHERE Header_id = @Header_id " +
                     "AND x_id= '@x_id'";

        var viewEmail = connection
            .Query<ViewEmail>(sql, new { Header_id = HeaderId, x_id = xId })
            .SingleOrDefault();

        return viewEmail;
    }
}
public-viewmail-getviewmail(字符串xId,int-headerId)
{
正在使用(IDbConnection connection=newmysqlconnection(_connectionString))
{
string sql=“从查看电子邮件中选择*”+
“其中Header\u id=@Header\u id”+
“和x_id='@x_id'”;
var viewmail=连接
.Query(sql,新的{Header\u id=HeaderId,x\u id=xId})
.SingleOrDefault();
返回查看电子邮件;
}
}

当使用准备好的语句时,不需要用
'包装参数
。请尝试以下方法:

string sql = "SELECT * FROM ViewEmail " +
             "WHERE Header_id = @Header_id " +
             "AND x_id= @x_id";

请参阅

尝试删除
@x_id
@haim770周围的引号-谢谢。就是这样,但有点让人困惑。在MySql中,我认为必须在字符串周围加引号,例如,在where子句中。Dapper会为您处理这些吗?@xaisoft
@x_id
不是字符串。它是一个包含字符串的参数。@xaisoft,使用准备好的语句,将实际参数附加到服务器端。如果将sql参数声明为与不需要在匿名类型中分配的方法参数完全相同,请参见。您可以只使用“new{xId,headerId}”,只要确保sql读取“WHERE Header_id=@headerId和x_id=@xId”