Dapper中的.Execute(sQuery,...)返回一个整数。
string sQuery = "SELECT FirstName FROM Customers WHERE Id = @Id";
我该如何实现这个函数来返回名字?
Dapper中的.Execute(sQuery,...)返回一个整数。
string sQuery = "SELECT FirstName FROM Customers WHERE Id = @Id";
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 });
//...
}
Execute
,但那不是你想要的,也不能完成你想要的功能。你想要的方法——由dapper提供——是:QueryFirstOrDefault
。 <string>
告诉它一行数据应该长成什么样子。其他以Query...
开头的方法用于不同的场景。在你的情况下,由于你可能期望零个或一个匹配项,因此这是一个“第一个或默认”的情况。 - Marc GravellExecute
用于执行像 insert
或 update
这样的操作,不期望返回结果表格。从 select
语句中返回的结果表格是查询的一部分:你正在发出一个查询。 - Marc GravellSqlCeConnection
或 QueryFirstOrDefault
吗? - Edward如果要在Asp.Net Core和Dapper中执行查询,请尝试使用SqlConnection
和Query
。
这是完整的代码:
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
}
Query
来获取所需的结果 - Nkosi