【问题标题】:Another shorten SQL string? c#另一个缩短 SQL 字符串? C#
【发布时间】:2012-12-21 03:23:06
【问题描述】:

有些人可能已经注意到这一点,我想确认一下,我对复杂的 SQL 字符串真的没有经验。我只知道简单的 SELECT 、 INSERT 、 UPDATE 和 DELETE 语句。为了达到我的目的,我经常使用 2 个 SELECT 语句,比如这个:

con.Open();
string cmdstr = "SELECT UNIQUE FROM recipeList WHERE `stock_ID` = '" + stockIDTxtbox.Text + "'";
cmd = new MySqlCommand(cmdstr, con);
dr = cmd.ExecuteReader();
string menuID = "";
while (dr.Read())
{
   menuID = (dr["menu_ID"].ToString());
}
dr.Close();
con.Close();

con.Open();
string cmdstr = "SELECT `menu_name` FROM recipedb WHERE `menu_ID` = '" + menuID + "'";
cmd = new MySqlCommand(cmdstr, con);
dr = cmd.ExecuteReader();
string menuName = "";
while (dr.Read())
{
    menuName = (dr["menu_name"].ToString());
    this.listView1.Items.Add(new ListViewItem(new string[]{ menuName  }))
}
dr.Close();
con.Close();

任何想法如何缩短这个? o.O

【问题讨论】:

  • Holy Sql 注入漏洞,蝙蝠侠!
  • 使用连接......以及乔尔所说的!
  • 正如 Joel 和 Mitch 已经指出的那样,您存在大量 SQL 注入问题。如果您不确定什么是 SQL 注入,请查看 troyhunt.com/2010/05/… 以获得良好的介绍以及如何避免它

标签: c# mysql sql select


【解决方案1】:

您可以将 SQL 编写为:

 string queryString =  "SELECT r2.menu_name "+
                       "FROM recipelist rl "+ 
                          "INNER JOIN recipedb r2 "+
                          "ON rl.menu_ID = r2.menu_ID "+
                       "WHERE r1.stock_ID = '" + stockIDTxtbox.Text + "'";

【讨论】:

    【解决方案2】:

    好久没写SQL了,应该是join吧,像下面这样:

    select rdb.menu_name
    from recipedb rdb, 
         recipelist rl
    where rl.menu_ID = rdb.menu_ID and
          rl.stock_ID = * insert your stockIDTxtbox.Text in here without the stars *
    

    【讨论】:

    • 呃。真的不推荐使用 "," 的连接语法。
    • 为什么不推荐这种语法?
    【解决方案3】:

    这是一个简短的:

    con.Open();
    string cmdstr = "SELECT menu_name FROM recipedb WHERE menu_ID in (SELECT UNIQUE menu_id from recipeList WHERE stock_ID = '" + stockIDTxtbox.Text + "')";
    cmd = new MySqlCommand(cmdstr, con);
    dr = cmd.ExecuteReader();
    string menuName = "";
    while (dr.Read())
    {
       menuName = (dr["menu_name"].ToString());
       this.listView1.Items.Add(new ListViewItem(new string[]{ menuName  }))
    }
    dr.Close();
    con.Close();
    

    【讨论】:

    • 这个 sql 字符串与 INNER JOINed 的有什么区别?
    猜你喜欢
    • 1970-01-01
    • 2017-11-11
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多