gpt4 book ai didi

c# - 使用 SQL Server 时在 ASP.Net C# 中准备语句

转载 作者:太空狗 更新时间:2023-10-29 22:33:50 25 4
gpt4 key购买 nike

我刚开始使用 ASP.NET C#,我的数据库是 SQL Server。我正在尝试编写一个查询,我想在其中使用准备好的语句。

这是一个允许登录用户的查询:

    SqlParameter UserName = new SqlParameter("@user", SqlDbType.NVarChar, 30);
SqlParameter Password = new SqlParameter("@pass", SqlDbType.NVarChar, 20);

UserName.Value = user.ToLower();
Password.Value = pass;

SqlCommand command = new SqlCommand(null, conn);
command.Parameters.Add(UserName);
command.Parameters.Add(Password);
command.CommandText = "SELECT * FROM table_users WHERE user_name = '@user' AND password = '@pass';";

command.Prepare();
SqlDataReader reader = command.ExecuteReader();

bool tmp = reader.HasRows;

tmp 变量值始终为 FALSE,即使我使用正确的密码输入现有用户也是如此。

如果我只是删除参数并以这种方式编写查询:

command.CommandText = "SELECT * FROM table_users WHERE user_name = '"+user+"' AND password = '"+ pass+"';";

tmp 变量为现有用户获取值 TRUE

我尝试将此语法用于 INSERT INTO 查询并且它工作正常。

我已经阅读了所有关于将 @ 更改为 ? 的建议,但它不起作用。我有一个错误:

Incorrect syntax near '?'. Statement(s) could not be prepared.

请帮帮我,谢谢!

最佳答案

您正在寻找文字 '@user''@pass',而不是参数中的值;使用:

 command.CommandText =
"SELECT * FROM table_users WHERE user_name = @user AND password = @pass;";

相反。然后研究“加盐哈希”,以及为什么您永远不应该实际存储密码。

顺便说一句,在这里调用 Prepare() 没有帮助。我还将插入 dapper-dot-net(免费/OSS),这将使整个事情变得简单:

bool authenticated = conn.Query(
@"select 1 from table_users where user_name = @user and password = @pass",
new {user = user.ToLower(), pass} ).Any();

或者,如果您想要记录:

var tableUser = conn.Query<TableUser>(
@"select * from table_users where user_name = @user and password = @pass",
new {user = user.ToLower(), pass} ).SingleOrDefault();

关于c# - 使用 SQL Server 时在 ASP.Net C# 中准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8339107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com