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

时间:2014-03-27 09:43:19

标签: c# asp.net sql-server database select

请你帮我解释为什么我的选择命令不要选择任何数据。我尝试更改从名称到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

感谢所有能帮助我的人。

5 个答案:

答案 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;

尝试注释掉这些行并测试您的代码。