【发布时间】: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)。
标签: c# mysql datareader