【发布时间】:2021-11-11 07:22:24
【问题描述】:
我想在 ASP.NET WebAPI 中使用 ADO.NET 通过 SQL 查询的用户名检查用户是否存在于数据库中。
就像在 Entity 中一样,有 Any() 调用可以完成工作。
private async Task<bool> UserExists(string username)
{
return await context.Contacts.AnyAsync(x => x.UserId == username.ToLower());
}
if (await UserExists(createUserDto.Username))
return BadRequest("Username is taken");
我想做同样的工作,但手动使用 SQL 查询并将该对象存储在 var user 中,最后询问 DB 中是否有用户...(并与该用户进行其他编码)。
我正在传递我想要创建的 CreateUserDtO,以便在 getUserByUserName 的正文中进一步使用属性字符串 userId 来运行。 UserId 是字符串。
var user = await accountRepository.GetUserById(createUserDto.UserId);
我在 GetUserById(string username) 中打开连接、执行查询、提交/回滚事务和关闭连接。我只想知道我的查询应该如何返回该用户的对象。
public Task<bool> GetUserById(string username)
{
int result = 0;
bool success = false;
string usernameCheck = username.ToLower();
try
{
OpenConnection();
BeginTransaction();
string query = "...";
SqlCommand command = new SqlCommand(query, connection, transaction);
result = "..."
}
catch (Exception ex)
{
_ = log.WriteLine("ERROR : " + ex.Message + "\nStackTrace : " + ex.StackTrace);
}
finally
{
if (result == 1)
{
CommitTransaction();
success = true;
}
else
{
RollbackTransaction();
}
CloseConnection();
}
return success;
}
}
这可能吗?
【问题讨论】:
-
你说的是SQL,但是我上面没有看到SQL。您确定要 SQL 语言 答案吗?
-
听起来您需要一个 ADO.NET 教程,而不仅仅是一个查询。 ADO.NET 返回行结果,而不是对象。这段代码已经有严重的错误,它甚至不执行任何查询
-
例如,连接是短暂的。检索单行根本不需要事务。此代码会泄漏连接并导致大范围阻塞
-
检查 Basics of ADO.NET 以了解 ADO.NET 的工作原理。 之后你检查Basics of Dapper看看如何简化
-
感谢您的建议@PanagiotisKanavos