如何使用Dapper执行SQL查询并返回字符串

4

Dapper中的.Execute(sQuery,...)返回一个整数。

string sQuery = "SELECT FirstName FROM Customers WHERE Id = @Id";

我该如何实现这个函数来返回名字?

1
使用 Query 来获取所需的结果 - Nkosi
2个回答

5

Execute是一个扩展方法,可以从任何类型为IDbConnection的对象中调用。它可以执行一次或多次命令返回受影响的行数

强调是我的

你不能使用Execute来完成你所要求的操作。

请使用基于Query*的调用之一以获得所需的结果。

例如:

string sQuery = "SELECT FirstName FROM Customers WHERE Id = @Id";

using (var connection = new SqlCeConnection("connection string")) { 
    var firstName = connection.QueryFirstOrDefault<string>(sQuery, new { Id = 1 });

    //...
}

我是 .NET Core 的新手,无法使用 Dapper 实现这个。 - Dulanga Heshan
不能使用Dapper实现此操作,除非使用execute方法。 - Dulanga Heshan
2
@dulangaheshan dapper提供了许多扩展方法;其中之一是Execute,但那不是你想要的,也不能完成你想要的功能。你想要的方法——由dapper提供——是:QueryFirstOrDefault<string>告诉它一行数据应该长成什么样子。其他以Query...开头的方法用于不同的场景。在你的情况下,由于你可能期望零个或一个匹配项,因此这是一个“第一个或默认”的情况。 - Marc Gravell
1
@DulangaHeshan 更加具体地说:Execute 用于执行像 insertupdate 这样的操作,不期望返回结果表格。从 select 语句中返回的结果表格是查询的一部分:你正在发出一个查询 - Marc Gravell
@DulangaHeshan 你所说的 无法使用 Dapper 实现 是什么意思?你是指没有 SqlCeConnectionQueryFirstOrDefault 吗? - Edward

4

如果要在Asp.Net Core和Dapper中执行查询,请尝试使用SqlConnectionQuery

这是完整的代码:

using Dapper;

public class CustomersController : Controller
{
    private readonly ApplicationDbContext _context;
    private readonly IConfiguration _configuration;

    public CustomersController(ApplicationDbContext context
        , IConfiguration configuration)
    {
        _context = context;
        _configuration = configuration;
    }

    // GET: Customers/Details/5
    public async Task<IActionResult> Details(int? id)
    {

        using (var connection = new SqlConnection(_configuration.GetConnectionString("DefaultConnection")))
        {
            string sQuery = "SELECT Name FROM Customer WHERE Id = @Id";
            var customer = connection.QueryFirstOrDefault<string>(sQuery, new { Id = id});
        }
        //Rest Code
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接