2012-02-01 7 views
1

私は、UPCのタイトルと数量という名前の列を持つデータベースを持っています。他にも更新値がある場合は、Mysqlの値を確認してください。

MySqlConnection connection = new MySqlConnection(MyConString); 
       connection.Open(); 
       MySqlCommand command = connection.CreateCommand(); 
       command.CommandText = "INSERT INTO tableName " + 
          "(upc, title, description, quantity) " + 
         "VALUES " + 
          "(@upc, @title, @description, @quantity)"; 
       MySqlCommand upcCheck = connection.CreateCommand(); 
       upcCheck.CommandText = "Select COUNT (*) FROM tableName WHERE " + 
        "([email protected]) LIMIT 1"; 
       upcCheck.Parameters.AddWithValue("@upc", upc.Text); //Checks for duplicate UPCs 
       MySqlDataReader check = upcCheck.ExecuteReader(); 
        if(check.Read() != false) 
        { 
         command.Parameters.AddWithValue("@quantity",++); //not sure how to word it right 
        } 


       command.Parameters.AddWithValue("@upc", upc.Text); //adding parameters SAFELY to the statement 
       command.Parameters.AddWithValue("@title", titlename); 
       command.Parameters.AddWithValue("@description", descname); 
       command.Parameters.AddWithValue("@quantity", "1"); 

       MySqlDataReader result = command.ExecuteReader(); 

私はちょうどよ:私は、UPC番号が既に列に存在しており、ITはその後、ここ1によって、そのエントリの数量を更新しない場合は、私がこれまで持っているものであるかどうかを確認するためにチェックを行うにしようとしていますそれをチェックするためにどのように語るべきかわからない。

UPDATE!ここに作業コードがあります。

MySqlConnection connection = new MySqlConnection(MyConString); 

       connection.Open(); 
       MySqlCommand updatecommand = connection.CreateCommand(); 

       updatecommand.CommandText = "UPDATE tableName Set quantity = quantity +1 " + 
        "WHERE upc = @upc"; 
       updatecommand.Parameters.AddWithValue("@upc", upc.Text); 
       using (MySqlDataReader updateResult = updatecommand.ExecuteReader()) 
       { 


        if (updateResult.RecordsAffected == 0) 
        { 
         affected = true; 
        } 
        else 
        { 
         affected = false; 
        } 
       } 
       if(affected == true) 
       { 

        MySqlCommand command = connection.CreateCommand(); 
        command.CommandText = "INSERT INTO tableName " + 
         "(upc, title, description, quantity) " + 
        "VALUES " + 
         "(@upc, @title, @description, @quantity)"; 
        command.Parameters.AddWithValue("@upc", upc.Text); 
        command.Parameters.AddWithValue("@title", titlename);//adding parameters SAFELY to the statement 
        command.Parameters.AddWithValue("@description", descname); 
        command.Parameters.AddWithValue("@quantity", "1"); 



        MySqlDataReader result = command.ExecuteReader(); 
       } 
+1

あなたが実際にこのために* *のアップサートを使用することができます - http://en.wikipedia.org/wiki/Upsert –

+0

ので、もし私は挿入物またはuの代わりにupsertをするそれをpdateするか、どちらかを行うでしょうか? –

+0

うわー、両方の文を1つのupsertに置き換えてください。ロジックは「存在しない場合はこれを挿入し、そうでない場合は行を更新します」。 –

答えて

1

...挿入のためにあなたが持っているそれ以外の形式(パラメータ)は完全に罰金です。

Hristoによって提供されるON DUPLICATE KEY UPDATEはすばらしいですが、レコードの他の列要素が欠落しています。私は残りの部分を続行...そうでなければ、それはファイルにありませんでし値/ステータスがMySqlDataReaderから返される方法を知っているが、

result = command.ExecuteReader(); 

if(the status indicates it actually succeeded in an update, 
    or how many records were updated > 0) 
    return; // you've just increased the counter... 

いけない** ..

MySqlCommand command = connection.CreateCommand(); 
command.CommandText = "UPDATE tableName Set Quantity = Quantity +1 " + 
          "WHERE upc = @upc" 
command.Parameters.AddWithValue("@upc", upc.Text); 

に変更しますあなたのSQL-insertコマンドの、我々​​は最後のコマンドのインスタンスを上書きすることができます...

command = connection.CreateCommand(); 
command.CommandText = "INSERT INTO tableName " + 
          "(upc, title, description, quantity) " + 
         "VALUES " + 
          "(@upc, @title, @description, @quantity)"; 

command.Parameters.AddWithValue("@upc", upc.Text); 
command.Parameters.AddWithValue("@title", titlename); 
command.Parameters.AddWithValue("@description", descname); 
command.Parameters.AddWithValue("@quantity", "1"); 

result = command.ExecuteReader(); 
+0

あなたの作品はうまくいくようですが、更新が成功したかどうかを確認する構文は何ですか?それは私が曇っている唯一の部分です。このソリューションの他の誰かからの助け? –

+0

私はそれをしました!私がやった: 場合(updateResult.RecordsAffected == 0){ インサートの残りを行い} –

+0

が問題に走ったが、私はそれを固定しました。私はすぐに元の投稿のコードを編集する方法を反映するために –

1

UPCはあなたがMySQLデータベースのINSERT ON DUPLICATE KEY UPDATE機能を使用することができ、主キーであるならば。 INSERTしたくない場合は、新しいUPCは、テーブルのデータに影響を与えない場合には、そのような行がない場合にUPDATEクエリを実行するだけです。私はMySqlDataReaderと特異的に働いていませんでしたが、私は少し周りのクエリを変更します

UPDATE <tablename> SET quantity=quantity+1 WHERE UPC='<upc>' 
+0

それはそれがそこにあればそれを更新するので動作しません。それがそうであればそれは別のものを挿入しますUPCはプライマリキーでなければプライマリではありませんか? –

+0

これは、重複したキー上に挿入されない場合は、標準の更新ステートメントのみを使用する場合、それはあなたが望むことを行う必要があります:poductがデータベースに存在する場合は、数を増やします。私はあなたの質問 –

+0

を解散させましたか? –

関連する問題