0

データベース内の文字列と完全に一致するリストボックス内の文字列を使用してデータベースの1つの列を更新しようとしていますが、スペースのない文字列に対してのみ機能します。たとえば、リストボックスに「iPhone」のような製品がある場合、その文字列を取得して、以下のUpdate()メソッドに渡すと、機能します。しかし、リストボックスから選択したアイテムとして「Samsung Galaxy S3」を使用すると、VisualStudioはそのような行がないというエラーをスローします。

その言葉の間にスペースがあるからだと思います。どうすれば問題を解決できますか。

データベースを更新するコード

 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;
            }

各アイテムの文字列をUpdate()メソッドに渡すコード。

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

ここに画像の説明を入力してください

4

2 に答える 2

1

変更してみる

string sql = "UPDATE [Product] SET [Quantity]=[Quantity] - 1 " + " WHERE [Product Name]= " + product;

string sql = "UPDATE [Product] SET [Quantity]=[Quantity] - 1 WHERE [Product Name]= ?";

パラメータを追加して@productいますが、使用していません。クエリを連結することはお勧めできません。SQL インジェクション攻撃にさらされることになります。

于 2013-03-01T09:51:15.800 に答える
0
string sql = "UPDATE [Product] SET [Quantity]=[Quantity] - 1 " + " WHERE [Product Name]= '" + product + "'"; 

代わりにこれを試してください:)

製品を文字列として識別する必要があります:)

于 2013-03-01T09:49:35.740 に答える