2
string menuRecipe = "SELECT * FROM recipelist WHERE menu_ID = '" + menuID + "'";
MySqlCommand recipeCmd = new MySqlCommand(menuRecipe, db.mycon);
MySqlDataReader recipeDr = recipeCmd.ExecuteReader();
string[] info = new string[8];
while (recipeDr.Read())
{
    info[1] = (recipeDr["recipe_ID"].ToString());
    info[2] = (recipeDr["stock_ID"].ToString());
    info[4] = (recipeDr["recipe_quantity"].ToString());
    string stockName = "SELECT stock_name FROM stocksdb WHERE stock_ID = '" + info[2] + "'";
    cmd = new MySqlCommand(stockName, db.mycon);
    MySqlDataReader nameDr = cmd.ExecuteReader();
    while (nameDr.Read())
    {
        info[3] = (nameDr["stock_name"].ToString());
    }
    this.recipeList.Items.Add(new ListViewItem(new string[] { info[1], info[2], info[3], info[4] }));
}

私は主に、複数のSQLコマンド文字列を使用する必要性を減らしたいと思っていますが、方法がわかりません。また、一部が混乱する可能性があるため、それらをそれぞれの場所に分離する方法もわかりません。

4

3 に答える 3

5

クエリを次のように変更できます

SELECT r.*, s.stock_name FROM recipelist r
LEFT OUTER JOIN stocksdb s ON r.stock_ID = s.stock_ID
WHERE menu_ID = @parameter
于 2012-12-20T03:22:30.120 に答える
2

最初のクエリでINNERJOINを実行して、stocksdbテーブルをstock_IDのレシピリストテーブルにリンクできます。

于 2012-12-20T03:19:03.873 に答える
2

コードを次のように変更します。

string connect = "...";
using (var cn = new SqlConnection(connect))
{
    cn.Open();

    string sql = @"
SELECT r.*, s.stock_name 
FROM recipelist r
LEFT OUTER JOIN stocksdb s ON r.stock_ID = s.stock_ID
WHERE menu_ID = @MenuID";
    var cmd = new SqlCommand(sql, cn);
    cmd.Parameters.Add("@MenuID", SqlDbType.Int).Value = menuID;
    var dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        this.recipeList.Items.Add(new ListViewItem(new string[] { 
            dr["recipe_ID"].ToString(), 
            dr["stock_ID"].ToString(), 
            dr["stock_name"].ToString(), 
            dr["recipe_quantity"].ToString()
        }));
    }
}
于 2012-12-20T03:37:27.587 に答える