请你帮我解释为什么我的选择命令不要选择任何数据。我尝试更改从名称到ID的选择,它可以工作,但我需要这个选择工作的名称选择不是ID。
数据库数据:
id user password level
1 Rad3k ..... 0
选择的脚本:
public bool loginVerification(string name, string password)
{
test = name;
bool access = false;
string checkLogin, checkPassword;
int level;
commandS = new SqlCommand("SELECT * FROM dbo.users WHERE user like @name", conn);
try
{
conn.Open();
commandS.Parameters.Clear();
// Parameters
SqlParameter nameParam = new SqlParameter("@name", SqlDbType.VarChar, 30);
nameParam.Value = name;
commandS.Parameters.Add(nameParam);
commandS.Prepare();
SqlDataReader reader = commandS.ExecuteReader();
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
if (reader.IsDBNull(i))
return access = false;
checkLogin = reader.GetString(1);
checkPassword = reader.GetString(2);
level = reader.GetInt32(3);
if (name == checkLogin && hashPassword.ValidatePassword(password, checkPassword) == true)
access = true;
}
return access;
}
finally
{
conn.Close();
}
}
如果我使用此选项,那么它可以工作:
commandS = new SqlCommand("SELECT * FROM dbo.users WHERE id = 1", conn);
但是当我使用它时它不起作用:
commandS = new SqlCommand("SELECT * FROM dbo.users WHERE user like @name", conn);
I try use this without parameter, but it dont work too.
commandS = new SqlCommand("SELECT * FROM dbo.users WHERE user like 'Rad3k'", conn);
commandS = new SqlCommand("SELECT * FROM dbo.users WHERE user like '%Rad3k%'", conn);
commandS = new SqlCommand("SELECT * FROM dbo.users WHERE user like 'Rad3k%'", conn);
commandS = new SqlCommand("SELECT * FROM dbo.users WHERE user = 'Rad3k'", conn);
// and same with paramter still dont work
感谢所有能帮助我的人。
答案 0 :(得分:1)
你的命令应该是这样的
SELECT * FROM dbo.users WHERE user like '%" + @name + "%'"
答案 1 :(得分:1)
如果使用纯SQL语句,则使用
SELECT * FROM dbo.users WHERE user like '%Rad3k%'
你需要%
来匹配子字符串,没有它们就意味着完全匹配(只能找到用户'Rad3k')。请注意,您也可以使用like 'Rad3k%'
作为“开头”匹配。
从带参数的C#开始,它将是
commandS = new SqlCommand("SELECT * FROM dbo.users WHERE user like '%' + @name + '%'", conn);
答案 2 :(得分:0)
在对like
进行过滤时,您需要使用strings
运算符:
SELECT * FROM dbo.users WHERE user like '%" + @name + "%'"
答案 3 :(得分:0)
尝试使用AddWidthValue
:
SqlParameter nameParam = new SqlParameter("@name", SqlDbType.VarChar, 30);
commandS.Parameters.AddWidthValue("name", name);`
答案 4 :(得分:0)
您的查询应该有效。您可以使用不带%的like运算符。如果你想在用户上进行精确匹配,你可以使用user = @name。
您确定该行中没有任何其他列为null吗? 此代码使用空列解除所有行:
for (int i = 0; i < reader.FieldCount; i++)
if (reader.IsDBNull(i))
return access = false;
尝试注释掉这些行并测试您的代码。