【问题标题】:C# forms Textbox value against database value, sql command or datadapter datasetC# 根据数据库值、sql 命令或数据适配器数据集形成文本框值
【发布时间】:2012-02-16 21:23:07
【问题描述】:

基本上我想要实现的目标如下:-

我有一个带有值的文本框字段,如果有匹配项,我想对照 SQL Server 数据库中的值检查该值,然后执行特定任务。

这是我目前所拥有的:

SELECT        userID, username , password
FROM           Users
WHERE        (username = textboxUsername.text) AND (password = textboxPassword.text

但这似乎对我不起作用,我想我几乎做对了吗?

另外,我最好使用数据集还是只使用 bog stand sql 命令,因为还会执行其他查询?

非常感谢

【问题讨论】:

    标签: c# sql dataset command


    【解决方案1】:

    稍微扩展一下 mazzucci 的回答:

    using (var con = new SqlConnection("connection string"))
    {
        con.Open();
        var cmd = new SqlCommand(@"SELECT userID, username, password FROM Users WHERE (username = @username) AND (password = @password)");
        cmd.Parameters.AddWithValue("@username", textboxUsername.Text);
        cmd.Parameters.AddWithValue("@password", textboxPassword.Text);
    
        if (cmd.ExecuteNonQuery() > 0)
        {
            //They were the same
        }
    }
    

    但是,请考虑您所做的任何事情看起来都相当危险。我认为 Eric Lippert 在 SO 上发表了很多关于密码和身份验证的危险的帖子。

    比如这个: Does salt need to be random to secure a password hash?

    【讨论】:

    • 无论是否匹配,我似乎也得到了 -1 的返回值?我不应该使用 .ExecuteScalar() 方法吗?
    【解决方案2】:

    您需要使用文本框中的值创建查询。

    例如,您可以使用命名参数执行此操作,以确保正确转义值:

    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = @"SELECT        userID, username , password
    FROM           Users
    WHERE        (username = @username) AND (password = @password)";
    
    cmd.Parameters.AddWithValue("@username", textboxUsername.Text);
    cmd.Parameters.AddWithValue("@password", textboxPassword.Text);
    ...
    

    【讨论】:

    • 我正在尝试使用工具箱中的 SQLCommand 控件执行此操作,但仍有问题
    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2021-10-23
    • 2012-11-02
    • 2017-12-15
    相关资源
    最近更新 更多