C# 在asp.net中查询时出错
错误显示无效的列名mustufain。 mustufain是C# 在asp.net中查询时出错,c#,asp.net,C#,Asp.net,错误显示无效的列名mustufain。 mustufain是UserName.Text.toString()的值 首先,您不应该使用字符串连接来构建查询,因为它会使您容易受到SQL注入攻击等攻击,并且会导致查询不正确的问题(因为您的参数周围缺少记号): 使用参数化的更好方法如下所示,这样可以避免不正确的语法,并为您提供防止任何恶劣注入的保护: // Open your connection using(var connection = new SqlConnection("{your conne
UserName.Text.toString()的值
首先,您不应该使用字符串连接来构建查询,因为它会使您容易受到SQL注入攻击等攻击,并且会导致查询不正确的问题(因为您的参数周围缺少记号):
使用参数化的更好方法如下所示,这样可以避免不正确的语法,并为您提供防止任何恶劣注入的保护:
// Open your connection
using(var connection = new SqlConnection("{your connection string}"))
{
// Build your query
var query = "SELECT TOP 1 userid FROM register WHERE username = @username AND password = @password";
// Build a command (to execute your query)
using(var command = new SqlCommand(query, connection))
{
// Open your connection
connection.Open();
// Add your parameters
command.Parameters.AddWithValue("@username",UserName.Text);
command.Parameters.AddWithValue("@password",Password.Text);
// Execute your query
var user = Convert.ToString(command.ExecuteScalar());
// If a user was found, then set it
if(!String.IsNullOrEmpty(user))
{
Session["checkuserid"] = user;
}
else
{
// No user was found, consider alerting the user
}
}
}
最后,您可能需要重新考虑如何存储凭证(以明文形式)。ASP.NET提供了各种各样的提供程序,可以帮助您处理此过程,这样您就不必自己动手了。首先,您不应该使用字符串连接来构建查询,因为它会使您容易受到SQL注入攻击等攻击,并且会导致查询不正确的问题(由于参数周围缺少勾号):
使用参数化的更好方法如下所示,这样可以避免不正确的语法,并为您提供防止任何恶劣注入的保护:
// Open your connection
using(var connection = new SqlConnection("{your connection string}"))
{
// Build your query
var query = "SELECT TOP 1 userid FROM register WHERE username = @username AND password = @password";
// Build a command (to execute your query)
using(var command = new SqlCommand(query, connection))
{
// Open your connection
connection.Open();
// Add your parameters
command.Parameters.AddWithValue("@username",UserName.Text);
command.Parameters.AddWithValue("@password",Password.Text);
// Execute your query
var user = Convert.ToString(command.ExecuteScalar());
// If a user was found, then set it
if(!String.IsNullOrEmpty(user))
{
Session["checkuserid"] = user;
}
else
{
// No user was found, consider alerting the user
}
}
}
最后,您可能需要重新考虑如何存储凭证(以明文形式).ASP.NET提供了各种各样的提供程序,可以帮助您处理此过程,这样您就不必自己执行此操作。您试图连接字符串以生成sql查询,通常会出现错误。在特定情况下,您会忘记将字符串值括在单引号之间。但唯一正确的方法是查询是通过参数化查询进行的
string query = @"select userid from register
where username = @name and password = @pwd";
using(SqlCommand cmd1 = new SqlCommand(query,connection))
{
connection.Open();
cmd1.Parameters.Add("@name", SqlDbType.NVarChar).Value = UserName.Text;
cmd1.Parameters.Add("@pwd", SqlDbType.NVarChar).Value = Password.Text;
using(SqlDataReader rd1 = cmd1.ExecuteReader())
{
....
}
}
还要注意的是,在数据库中以明文形式存储密码是一种非常糟糕的做法,而且存在很大的安全风险。在这个网站上,有许多问题和答案解释了如何创建密码哈希并存储该哈希而不是明文
例如:您试图连接字符串以生成sql查询,但通常会出现错误。在您的特定情况下,您忘记将字符串值括在单引号之间。但执行此查询的唯一正确方法是通过参数化查询
string query = @"select userid from register
where username = @name and password = @pwd";
using(SqlCommand cmd1 = new SqlCommand(query,connection))
{
connection.Open();
cmd1.Parameters.Add("@name", SqlDbType.NVarChar).Value = UserName.Text;
cmd1.Parameters.Add("@pwd", SqlDbType.NVarChar).Value = Password.Text;
using(SqlDataReader rd1 = cmd1.ExecuteReader())
{
....
}
}
还要注意的是,在数据库中以明文形式存储密码是一种非常糟糕的做法,而且存在很大的安全风险。在这个网站上,有许多问题和答案解释了如何创建密码哈希并存储该哈希而不是明文
例如:首先,ASP.NET不执行查询。这是ADO.NET。其次,您不应该通过连接来构造sql语句。使用参数化查询。在这种情况下,您不知道用户键入了什么。如果是1;drop table users;--
?只需搜索“Bobby Tables”即可要查看QLConnection、SqlCommand和SqlDataReader实现时会发生什么情况。您需要在finally
块中对它们调用dispose,或者将它们包装在一个中,以确保它们得到正确的处理。如果您现在不这样做,您将在以后遇到问题,并且很难跟踪问题。而且您似乎正在存储在数据库中设置明文密码。不要这样做!这是一个安全问题。密码应该是单向散列和盐析的,以使攻击难以检索明文密码。要测试用户是否输入了正确的密码,请比较散列副本。首先,ASP.NET不执行查询。这是ADO.NET.Second、 您不应该通过连接来构造sql语句。请使用参数化查询。在这种情况下,您不知道用户键入了什么。如果它是1;drop table users;--
?只需搜索“Bobby Tables”即可要查看QLConnection、SqlCommand和SqlDataReader实现时会发生什么情况。您需要在finally
块中对它们调用dispose,或者将它们包装在一个中,以确保它们得到正确的处理。如果您现在不这样做,您将在以后遇到问题,并且很难跟踪问题。而且您似乎正在存储在数据库中设置明文密码。不要这样做!这是一个安全问题。密码应该是单向散列和盐析的,以使攻击难以检索明文密码。要测试用户是否输入了正确的密码,请比较散列副本。