使用c#参数从数据库中选择数据
本文关键字:选择 数据 数据库 参数 使用 | 更新日期: 2023-09-27 17:53:49
请告诉我为什么我的select命令不选择任何数据。我尝试更改从名称到ID的选择,它的工作,但我需要这个选择工作的名称选择不仅为ID。
数据库数据:
id user password level
1 Rad3k ..... 0
select:
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();
}
}
如果我使用这个select,所以它工作:
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
感谢所有帮助我的人。
如果使用普通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);
你的命令应该是这样的
SELECT * FROM dbo.users WHERE user like '%" + @name + "%'"
过滤strings
时需要使用like
运算符:
SELECT * FROM dbo.users WHERE user like '%" + @name + "%'"
尝试使用AddWidthValue
:
SqlParameter nameParam = new SqlParameter("@name", SqlDbType.VarChar, 30);
commandS.Parameters.AddWidthValue("name", name);`
您的查询应该可以工作。你可以使用不带%的like运算符。如果你想精确匹配user,你可以使用user = @name。
您确定该行中没有任何其他列为空吗?以下代码忽略所有列为空的行:
for (int i = 0; i < reader.FieldCount; i++)
if (reader.IsDBNull(i))
return access = false;
试着注释掉这些行并测试你的代码