使用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

感谢所有帮助我的人。

使用c#参数从数据库中选择数据

如果使用普通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:

将value设置为传递参数
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;

试着注释掉这些行并测试你的代码