C# MySQL 从与另一个匹配的列中检索值
Posted
技术标签:
【中文标题】C# MySQL 从与另一个匹配的列中检索值【英文标题】:C# MySQL retrieving a value from a column matching another 【发布时间】:2013-07-14 03:29:33 【问题描述】:所以我有一个包含以下列的表格: ID、姓名、地址等。
我一直在做一些研究,但我找不到正确的关键字来找出我想做的事情。我希望能够获取名称值(可以说...“John Doe”,它肯定已经在数据库中了..)并检索它的 ID(来自 int mysql 值 ID)。
我遇到了以下代码,但我似乎无法弄清楚如何扩展其限制以满足我的需求。
connection2.Open();
cmd.ExecuteNonQuery();
try
MySqlDataReader myReader = cmd.ExecuteReader();
while (myReader.Read())
Console.WriteLine(myReader.GetString(myReader.GetOrdinal("id")));
myReader.Close();
finally
connection2.Close();
这也是我力所能及的办法。
MySqlConnection connection2 = new MySqlConnection("Server=" + server + ";" + "Port=" + port + ";" + "Database=" + database + ";" + "Uid=" + uid + ";" + "Password=" + password + ";");
string query = @"SELECT id FROM caregiverdatabse WHERE name Like '%" + caregiverNameDisp.Text + "%'";
MySqlCommand cmd = new MySqlCommand(query, connection2);
【问题讨论】:
不清楚您所说的“获取名称值并从中检索 id”是什么意思。那么,您有一个包含name
列中的值的变量,并且您想查询数据库以从同一记录上的id
列中获取值?对于初学者,name
是唯一的还是会有多个记录?此外,显示的代码不包括cmd
对象或任何参数中的实际 SQL 命令,因此我们无法真正看到那里需要更改的内容。本质上,该命令将选择id
,其中name
匹配给定值。
是的,完全正确。我已经尽我所能编辑了这篇文章。希望对您有所帮助!
这有几个潜在的问题。首先是查询对所谓的 SQL 注入攻击完全开放。在此处阅读它们:owasp.org/index.php/SQL_Injection 本质上,您永远不想在不先“清理”它的情况下将用户输入直接添加到查询中。考虑使用称为参数化查询的东西来帮助解决这个问题。然而,更重要的是,查询中的caregiverdatabase
是什么?在您使用该术语的地方,您应该使用表的名称,而不是数据库。
是的,我必须调查一下。对不起命名。确实是表的名字,我只是把它命名为(caregiverdatabse)。
【参考方案1】:
您应该用 sql 参数替换硬编码参数,但这里是您需要在此处执行的操作的一般概念。使用您当前的 sql 查询。
MySqlConnection sqlConn = new MySqlConnection();
MySqlCommand sqlCmd = new MySqlCommand();
string sSql = "SELECT id FROM caregiverdatabse WHERE name Like '%" + caregiverNameDisp.Text + "%'";
sqlConn.ConnectionString = "Server=" + server + ";" + "Port=" + port + ";" + "Database=" + database + ";" + "Uid=" + uid + ";" + "Password=" + password + ";";
sqlCmd.CommandText = sSql;
sqlCmd.CommandType = CommandType.Text;
sqlConn.Open();
sqlCmd.Connection = sqlConn;
MySqlDataReader reader = sqlCmd.ExecuteReader();
List<string> results = new List<string>();
while (reader.Read())
results.Add((reader["id"].ToString());
reader.Close();
sqlConn.Close();
请记住,您可以将阅读器结果添加到字符串,添加到类似上面的列表中,无论您想对它做什么。
【讨论】:
我按照以下方式进行操作,并将其更改为 results = reader["id"].ToString();。问题是它似乎总是显示最后一个值(现在是 ID 8)。有什么想法吗? 是的,因为你需要 results = results + reader["id"].ToString(); 我收到以下错误:无法将类型'string'隐式转换为'System.Collections.Generic.List这是如何 id en name pawe
clsMySQL.sql_con.Open();
string id = ID;
sql = "SELECT *FROM test";
cmd = new MySqlCommand(sql, clsMySQL.sql_con);
sql_cmd = new MySqlCommand(sql, clsMySQL.sql_con);
MySqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
id = dr["id"].ToString();
user = dr["user_name"].ToString();
pass = dr["password"].ToString();
if (name.Text == user && passw.Text == pass)
string depart = id;
Hide();
MessageBox.Show("it works");
// Then show the main form
cracker form = new cracker(name.Text);
form.sid = depart;
form.Show();
MessageBox.Show(ID);
else
MessageBox.Show("Invalid Login please check username and password");
clsMySQL.sql_con.Close();
【讨论】:
您的介绍性文字我们很难理解。您应该考虑修改/改进它。以上是关于C# MySQL 从与另一个匹配的列中检索值的主要内容,如果未能解决你的问题,请参考以下文章