c# - 使用 Visual Studio 创建登录表单

标签 c# mysql string visual-studio-2010 authentication

我是 Visual Studio 2010 的新手,我正在尝试创建一个登录表单。

我有这个代码。

        OdbcConnection con = new OdbcConnection("host=localhost;usr=root;password=admin;db=timekeeping;");
        OdbcCommand cmd = new OdbcCommand("SELECT * FROM receptionist WHERE username = '" + username_login.ToString() + "' AND password = '" + password_login.ToString() + "';");
        cmd.Connection = con;
        con.Open();
        OdbcDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            if (reader.GetString(0) != 1)
            { return false; }
            else
            { return true; }
        }
        cmd.Connection.Close();
        reader.Dispose();
        cmd.Dispose();

有错误,但我不知道那是什么问题。 这是一个屏幕截图:

enter image description here

希望有人能帮助我..

谢谢

最佳答案

您的代码容易受到 SQL Injection 的攻击.构建 SQL 查询时切勿使用字符串连接。改用参数化查询:

public bool IsValid(string username, string password)
{
    using (var conn = new OdbcConnection("host=localhost;usr=root;password=admin;db=timekeeping;"))
    using (var cmd = conn.CreateCommand())
    {
        conn.Open();
        cmd.CommandText = "SELECT count(*) FROM receptionist WHERE username = @username AND password = @password;";
        cmd.Parameters.AddWithValue("@username", username);
        cmd.Parameters.AddWithValue("@password", password);
        var count = (long)cmd.ExecuteScalar();
        return count > 0;
    }
}

然后像这样调用:

bool isValid = IsValid(username_login.ToString(), password_login.ToString());

此外,如果您使用的是 SQL Server,则最好使用 SqlConenction而不是 ODBC 驱动程序。

关于c# - 使用 Visual Studio 创建登录表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6450168/

上一篇:PHP 日期() 函数

下一篇:Mysql查询优化

相关文章:

c# - 存储库的 MEF 导出 <T> : IRepository<T>

c# - 保护 Windows 应用程序免受密码恢复工具的侵害

mysql - 如何将队列和堆栈持久化到数据库

java - 在字符串对象中的大写字母前插入空格

算术加法和字符串连接之间的Java '+'运算符?

c# - 如何使 IObservable<T> 的实现成为多线程的?

c# - .NET 的类似 Resque 技术

MySQL - phpmyadmin - 交换列

mysql - 如何查找查询次数最多的mysql数据库?

java - 正则表达式问题