【问题标题】:Get & Set MySQL Select获取和设置 MySQL 选择
【发布时间】:2015-04-26 02:11:13
【问题描述】:

我在这里缺少什么,似乎主要形式没有从 tsDBCon 类调用方法并且没有连接到数据库,我需要帮助,我是新手获取:设置属性,我做错了吗? ?谢谢。

public class tsDBCon
    {
    private string _user;
    private string _pass;

           public string User
           {
               get 
               {
                   return _user;
               }
               set
               {
                   _user = value;
               }
           }

           public string Pass
           {
               get 
               { 
                   return _pass; 
               }
               set
               {
                   _pass = value;
               }
           }


    public void QueryUser()
        {
            tsDBCon get = new tsDBCon();  
            var connSettings = ConfigurationManager.ConnectionStrings["MyDB"];
            {
                string CN = connSettings.ConnectionString;
                MySqlConnection conn = new MySqlConnection(CN);
                MySqlCommand cmd = new MySqlCommand("select * from users where user = @user and pass = @pass", conn);
                cmd.Parameters.AddWithValue("@user", get.User);
                cmd.Parameters.AddWithValue("@pass", get.Pass);
                MySqlDataReader reader = cmd.ExecuteReader();
                conn.Open();
                while (reader.Read())
                {
                    get.User = reader["user"].ToString();
                    get.Pass = reader["pass"].ToString();
                }
            }
        }
    }


     This is the code in Main Form
     tsDBCon ts = new tsDBCon();
     private void GetUser()
     {
      ts.User = txtUser.Text;
      ts.Pass = txtPass.Text;
     }

【问题讨论】:

  • 你不必使用get。在您的 tsDBCon 类中,只需使用属性的名称。
  • @GrantWinney 好吧,我注意到了。 RonBeyer 先生,您是什么意思? get:set 是不必要的吗?
  • 这个:get.User = reader["user"].ToString();应该是 User = reader["user"].ToString();没有必要使用get。在 User 或 Pass 之前,与您在命令参数中使用它的位置相同。
  • @RonBeyer 它有效,如果值正确先生,我如何通过我的主表单进行验证?
  • 这取决于您的意思,您正在做一些奇怪的事情,传入用户名和密码,然后将其从数据库中提取出来,所以我现在不知道您要验证什么。

标签: c# mysql get set


【解决方案1】:

我在这里缺少什么,似乎主要形式没有调用 来自tsDBCon 类的方法并且没有连接到数据库,我需要 帮助,我是新手 get:set 属性,我做错了吗?

是的,你做错了一些事情。

我想验证用户是否输入了正确的用户并通过文本框。

您的代码包含几个问题:

  • 当您创建 IDisposable 实例(例如 MySqlConnection)时,您需要处置它们。确保这一点的最简单方法是将它们包装在 using 块中。
  • 如果您创建一个对象的本地临时实例(例如tsDBCon get = new tsDBCon();),您为其属性分配的任何值将在您离开您所在的方法的范围后消失。除非您将其作为函数结果返回或通过ref 或out 参数。

要检查用户名/密码组合是否正确,从您提供的代码示例中,您可能需要进行如下更改:

public class tsDBCon
{
    private const string ExistsQuery = "select count(*) from users where user = @user and pass = @pass";

    public tsDBCon(string user, string pass)
    {
        User = user;
        Pass = pass;
    }

    public string User { get; set; }
    public string Pass { get; set; }

    public bool LoginExists()
    {
        var connSettings = ConfigurationManager.ConnectionStrings["MyDB"];
        var CN = connSettings.ConnectionString;

        using (var conn = new MySqlConnection(CN))
        {
            conn.Open();
            using (cmd = new MySqlCommand(ExistsQuery, conn))
            {
                cmd.Parameters.AddWithValue("@user", User);
                cmd.Parameters.AddWithValue("@pass", Pass);
                var count = (int)cmd.ExecuteScalar();
                return count > 0;
            }
        }
    }
}

并在您的主窗体中像这样使用它:

ts = new tsDBCon(txtUser.Text, txtPass.Text);
userLoginExists = ts.LoginExists();

最后一句话:切勿存储未加密的密码。

【讨论】:

  • 附加信息中发生了“System.InvalidCastException”类型的未处理异常:指定的强制转换无效。
  • @KevinRodriguez 那是因为您没有执行此答案中代码中的内容,而是在执行其他操作。这个答案中没有tsDBCon get = new tsDBCon(); 声明吗?
猜你喜欢
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 2014-12-25
  • 2023-04-02
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多