C# .NET SqlDataReader:用户代码未处理SqlException
正在使用创建的SQL Server表构建简单的.NET web应用程序。我不断地在SqlDataReader方面出错,并且一直坚持我的错误方向 下面是我的错误:附加信息:关键字“Table”附近的语法不正确 这是我的密码: 编辑: 第一版(编辑前):C# .NET SqlDataReader:用户代码未处理SqlException,c#,.net,sql,sql-server,sqlconnection,C#,.net,Sql,Sql Server,Sqlconnection,正在使用创建的SQL Server表构建简单的.NET web应用程序。我不断地在SqlDataReader方面出错,并且一直坚持我的错误方向 下面是我的错误:附加信息:关键字“Table”附近的语法不正确 这是我的密码: 编辑: 第一版(编辑前): 表是一个关键字。如果您的表被称为table,则sql必须对其进行转义。请尝试[表格] 还请注意,您需要为用户名使用一个参数,即,其中username=@username,您还可以使用适当的值将一个具有该名称的参数添加到命令中。表是一个关键字。如果您
表是一个关键字。如果您的表被称为
table
,则sql必须对其进行转义。请尝试[表格]
还请注意,您需要为用户名使用一个参数,即,
其中username=@username
,您还可以使用适当的值将一个具有该名称的参数添加到命令中。表是一个关键字。如果您的表被称为table
,则sql必须对其进行转义。请尝试[表格]
还请注意,您需要为用户名使用一个参数,即,
其中username=@username
,您还可以使用相应的值将一个具有该名称的参数添加到命令中。表是SQL中的保留关键字。尝试在其周围放置方括号:
SqlCommand cmd = new SqlCommand("SELECT Username from [Table] where Username = userName");
表是SQL中的保留关键字。尝试在其周围放置方括号:
SqlCommand cmd = new SqlCommand("SELECT Username from [Table] where Username = userName");
我认为您的SQL查询有两个问题 “从Username=Username的表中选择Username”
我认为您的SQL查询有两个问题 “从Username=Username的表中选择Username”
您的AuthenticateMe方法似乎有点错误,无法对用户进行身份验证
- 您使用的保留关键字(表)没有正确的分隔符 (方括号)
- 您不会将用户名和密码传递给检查的查询 如果用户在场
- 您调用两次ExecuteReader(?)
- 您可以使用使用的相同值检查查询返回的值 用于搜索(无用)
private bool AuthenticateMe(string userName, string password)
{
string connectionString = @".....";
string commandText = "SELECT COUNT(*) from [Table] where Username = @name AND Pass = @pwd");
using(SqlConnection sqlConnection1 = new SqlConnection(connectionString))
using(SqlCommand cmd = new SqlCommand(commandText, sqlConnection1))
{
sqlConnection1.Open();
cmd.Parameters.AddWithValue("@name", username);
cmd.Parameters.AddWithValue("@pwd", password);
int result = Convert.ToInt32(cmd.ExecuteScalar());
return (result > 0);
}
}
另外,请记住,将密码以纯文本形式存储在数据库中被认为是一种不好的做法。应该对存储的密码应用某种哈希函数,以禁止在有人获得数据库副本时出现任何安全问题。您的AuthenticateMe方法似乎有点错误,无法对用户进行身份验证
- 您使用的保留关键字(表)没有正确的分隔符 (方括号)
- 您不会将用户名和密码传递给检查的查询 如果用户在场
- 您调用两次ExecuteReader(?)
- 您可以使用使用的相同值检查查询返回的值 用于搜索(无用)
private bool AuthenticateMe(string userName, string password)
{
string connectionString = @".....";
string commandText = "SELECT COUNT(*) from [Table] where Username = @name AND Pass = @pwd");
using(SqlConnection sqlConnection1 = new SqlConnection(connectionString))
using(SqlCommand cmd = new SqlCommand(commandText, sqlConnection1))
{
sqlConnection1.Open();
cmd.Parameters.AddWithValue("@name", username);
cmd.Parameters.AddWithValue("@pwd", password);
int result = Convert.ToInt32(cmd.ExecuteScalar());
return (result > 0);
}
}
另外,请记住,将密码以纯文本形式存储在数据库中被认为是一种不好的做法。应该对存储的密码应用某种哈希函数,以禁止在有人获得数据库副本时出现任何安全问题。thx以获取响应。我输入了你的建议,汇编的很好,但没有给我一个结果。我更新了上面的代码。我的错误,应该是ExecuteScalar而不是ExecuteOnQuery。ExecuteScalar返回返回的数据集第一行的第一列。SELECT COUNT(*)只返回一行一列。ExecuteOnQuery返回受INSERT/UPDATE/DELETE操作影响的行数,而不是SELECT语句返回的行数告诉我指定的强制转换无效:int result=(int)cmd.ExecuteScalar();再次检查THX上方的修复以获得响应。我输入了你的建议,汇编的很好,但没有给我一个结果。我更新了上面的代码。我的错误,应该是ExecuteScalar而不是ExecuteOnQuery。ExecuteScalar返回返回的数据集第一行的第一列。SELECT COUNT(*)只返回一行一列。ExecuteOnQuery返回受INSERT/UPDATE/DELETE操作影响的行数,而不是SELECT语句返回的行数告诉我指定的强制转换无效:int result=(int)cmd.ExecuteScalar();再次检查上面的修复程序