-4

購入情報を追加する Windows アプリケーションがあります。購入がデータベースに追加される前に、ユーザーはコンボ ボックスからアイテムを選択し、リスト ボックスに追加します。ユーザーが [購入を追加] をクリックすると、データベースに 1 つまたは複数のアイテムが存在します。

そこにあるアイテムの名前は、データベース内の製品名と正確に一致します。

リストボックス内の各項目の文字列を取得し、データベース内の項目の量を減らす SQL クエリを書きたいと思います。合計数量は、テーブル Product の Quantity 列に保存されます。

このタスクを実行するアイデアを持っている人はいますか?

リストボックス項目の文字列をこのメソッドに1つずつ渡そうとしています

 public string Update(string product)
        {
            // Create connection object
            int ix = 0;
            string rTurn = "";
            OleDbConnection oleConn = new OleDbConnection(connString);
            try
            {
                oleConn.Open();
                string sql = "UPDATE [Product] SET [Quantity]=[Quantity] - 1 " + " WHERE [Product Name]= " + product;
                OleDbCommand oleComm = new OleDbCommand(sql, oleConn);

                oleComm.Parameters.Add("@product", OleDbType.Char).Value = product;

                ix = oleComm.ExecuteNonQuery();
                if (ix > 0)
                    rTurn = "Stock Updated";
                else
                    rTurn = "Update Failed";
            }
            catch (Exception ex)
            {

            }
            finally
            {
                oleConn.Close();
            }
            return rTurn;
        }

上記のメソッドは、以下のメソッドから製品名を取得します。

 public string updateStock()
        {
            string listItem = string.Empty;
            foreach (var listBoxItem in listBox1.Items)
            {



                if (listBox1.Items.IndexOf(listBoxItem) < listBox1.Items.Count - 1)
                {
                    listItem = listBox1.Items.ToString();
                }
            }

            return listItem;

        }

そして、ボタン イベント ハンドラからこのコードを呼び出します。

Update(updateStock());
4

1 に答える 1

0

次のようなことを試すことができます:

public void UpdateStock()
{
    foreach (var listBoxItem in listBox1.Items)
    {
        string result = Update(listBoxItem.ToString());
    }
}

public string Update(string product)
{
    // Create connection object
    string rTurn = "";
    OleDbConnection oleConn = new OleDbConnection(connString);
    try
    {
        oleConn.Open();
        string sql = "UPDATE [Product] SET [Quantity]=[Quantity] - 1 WHERE [Product Name] = @product";
        OleDbCommand oleComm = new OleDbCommand(sql, oleConn);

        oleComm.Parameters.Add("@product", OleDbType.VarChar, 50).Value = product;

        oleComm.ExecuteNonQuery();

        rTurn = "Stock Updated";    
    }
    catch (Exception ex)
    {
        rTurn = "Update Failed";
    }
    finally
    {
        oleConn.Close();
    }
    return rTurn;
}

EDIT : 上記のように、パラメーターを追加するときにサイズを簡単に指定できます。50は任意です。対象の[商品名]列と同じサイズにしてください。

于 2013-03-01T08:29:35.307 に答える