- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要做的是选择我的用户名所在的单元格,并将密码与在 Unity C# 中完成的文本进行比较,但我使用 Mysql Reference,它应该像任何类型的 C# 一样。现在我试图在 vb 中做类似的事情,当你读取阅读器中的值时,它在 vb 中看起来像这样rdr(0) 但我似乎无法在 C# 中执行此操作,这是我的代码。对于任何担心密码去向的人,我计划稍后添加加密。
void Login_Data(string un, string pw) {
con = new MySqlConnection(connectionString);
con.Open();
Debug.Log("Mysql state: " + con.State);
string sql = "SELECT * FROM `users` WHERE '" + un + "'";
cmd = new MySqlCommand(sql, con);
rdr = cmd.ExecuteReader();
while (rdr.Read()) {
if (rdr[3] == pw) // this is the problem it keeps warning
//me i like my stuff clean but i dont risk errors if (rdr[3] == pw) also
//it did give me an error but not here.
{
username = un;
MessageBox.Show(username + ", Has Logged in!", "API");
usertext.text = "User: " + username;
m_uid.text = "UserID: " + rdr.GetString("uid");
}
}
}
警告 CS0252 可能出现意外的引用比较;要进行值比较,请将左侧转换为类型“string”
我不明白这个警告或为什么会发生
最佳答案
这是一行修复:
.... if (rdr[3].ToString() == pw).....
您收到错误的原因是因为您正在将数据单元格与数据类型进行比较...
但是让我们多了解一点,好吗?
首先,你的SQL语句没有任何意义。我们来看看:
"SELECT * FROM `users` WHERE '" + un + "'"
因此,您正在使用 Where
子句。我们来谈谈一般语法。当我们使用任何与 WH
相关的单词时,我们难道不应该提供有关某事物的信息吗?就像,你不能只说:
Brian went to New Jersey Where...
相反,你可以说:
Brian went to New Jersey Where he left his browser cookies.
同样的规则适用于 SQL 语句。当您使用 Where
子句时,您实际上是在检查某个值是否与给定值匹配......
以下是 Where
语句的正确用法:
Select * From Table Where Column1 = 'Some Value'
继续...
您在这里使用了一个IDataReader
,这几乎是不必要的。为什么不直接比较 SQL 语句本身中的所有值呢?只需使用 AND
进行多重比较...
正如您所提到的,您将用户名和密码存储在数据库中。最佳做法是存储用户名和密码的哈希。为此,您有大量选项可供选择,例如 Argon2、bcrypt、scrypt 或 PBKDF2。
最后但并非最不重要的一点是,您的代码最大的问题是以下行:
MessageBox.Show(username + ", Has Logged in!", "API");
经过多年的努力,开发人员为了可扩展性、性能等而提出了诸如 MVVM 之类的模式。那你为什么生活在17世纪呢?永远记住:
You will spend 20% time writing the codes & 80% time in maintaining it.
所以,不要在UI线程本身中编写此类UI相关的代码。如果您熟悉 MVVM 模式,那么您已经知道我在说什么...
无论如何,希望你学到了一些东西......如果我在某个地方错了,请随时纠正。卡皮什?
关于c# - 在 C# 中选择 mysql 数据库单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54973301/
我是一名优秀的程序员,十分优秀!