【发布时间】:2022-01-23 05:19:00
【问题描述】:
我有一个带有 MySQL 数据库的 wordpress 网站。我创建了一个自定义表来创建此页面 https://www.my-pocket.cc/test-store-list/ 我正在创建一个 c# 桌面应用程序来更改表。问题出在站点名称下,我只得到最后一条记录,而不是它们两个。我正在使用 MySqlDataReader。我将 select 语句复制到 MySQL 并得到了正确的答案(请参阅 SQL select 语句)我还包括了我得到的输出和代码。
sql select statments c# output
enter code here
string connStr = "server=127.0.0.1;user=root;database=mypocket;port=3306;password=green2Apple#"; MySqlConnection conn = new MySqlConnection(connStr); conn.Open();
try
{
MySqlCommand cmd = new MySqlCommand("select Heading_id,Heading_Name, Heading_Order,Group_Class from button_headings order by Heading_Order", conn);
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
string connStr2 = "server=127.0.0.1;user=root;database=mypocket;port=3306;password=green2Apple#";
MySqlConnection conn2 = new MySqlConnection(connStr2);
conn2.Open();
txtOutput.Text += $"{reader.GetString("Heading_Name")} ";
string StoreId = $"{reader.GetString("Group_Class")}";
txtOutput.Text += "\r\n";
try
{
MySqlCommand cmd2 = new MySqlCommand("select Site_Url, FullName FROM siteinfo where StoreId = " + StoreId + " and showsite = 0", conn2);
MySqlDataReader reader1 = cmd2.ExecuteReader();
txtOutput.Text += "\t";
if (reader1.Read()) {
while (reader1.Read())
{
txtOutput.Text += "\t";
txtOutput.Text += $"{reader1.GetString("FullName")}";
txtOutput.Text += "\r\n";
}
}
else
{
txtOutput.Text += "\t";
txtOutput.Text += "No Records";
txtOutput.Text += "\r\n";
}
}
catch (Exception ex)
{
MessageBox.Show("Error Getting Records" + ex.ToString());
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error Getting Records" + ex.ToString());
}
btnReturn.Focus();
}
}
-
请使用 参数化查询 - 通过连接等方式构建 SQL 查询是灾难的根源。它不仅是许多难以调试的语法错误的来源,而且还是 SQL Injection attacks 的敞开大门。
-
@FranzGleichmann 对 SQL 注入的反对在这种情况下并不令人担忧,因为它是您自己的桌面应用程序,但请检查您的网站以了解这种模式。引用: xkcd.com/327
-
为什么不像 EF 那样使用 ORM?它将解决注入潜力并允许 LINQ 用于查询逻辑。