2016-06-14 20 views
0

削除コマンドで2番目の引数が必要であるとのエラーが表示されていますが、すでに2つあります。私はSQLとC#の新機能ですから、正しく理解していないかもしれません。SQL削除ステートメントの問題

private void RemoveFromRecipeButton_Click(object sender, EventArgs e) 
{ 
    string query = "DELETE FROM RecipeIngredient WHERE Id = @RecipeId & @IngredientId"; 

    using (connection = new SqlConnection(connectionstring)) 
    using (SqlCommand command = new SqlCommand(query, connection)) 
    { 
     connection.Open(); 

     command.Parameters.Remove("@RecipeId", ListRecipes.SelectedValue); 
     command.Parameters.Remove("@IngredientId", ListAllIngredients.SelectedValue); 

     command.ExecuteScalar(); 
    } 

    PopulateRecipes(); 
} 

私は&と同じ行のRecipeIDとIngredientIDの両方を置くが、それは私の追加文で動作しますので、それはあるかもしれないと思っています。

だから私は実際にどのように削除がうまくいくか確信しています。誰でも問題の特定を支援できますか?

+1

なぜあなたは '&'をやっていますか?なぜ要素を削除しようとしていて、空のコレクション( 'command.Parameters')ですか? – TZHX

+3

WHERE Id = @RecipeId&@ IngredientId'は有効なSQLではありません。ここで何を言おうとしていますか? – Blorgbeard

+0

有効なSQL、@ Blorgです。ユーザーが望んでいることをやることはほとんどありません。 – TZHX

答えて

0

ここにはいくつかの問題があります。

最初の1つは、あなたのSQLが何をしようとしているのか分かりません。実際にビット単位のANDを実行しようとしていますか、Id@RecipeId@IngredientIDの両方に等しいかどうかを確認しようとしていますか?

さらに、SQLステートメントにパラメータが含まれているというだけで、cmd.Parameters.Remove()を使用して削除することはできません。 Command.Parametersコレクションは、プログラム内の値をSQL文の特定のパラメータに関連付けるために使用されます。ステートメントから本当にそれらを削除する場合は、リテラルSQL文字列からパラメータを削除する必要があります。

+0

SQLには何も無効です。ユーザーが何をしたいのかはほぼ間違っていますが、実行されます。 – TZHX

2

Parameters.AddWithValueに電話したいと思われる場合はParameters.Removeに電話しています。 deleteステートメントを実行していますが、を削除してパラメータを削除したいというわけではありません。 には、何を削除するかを指定するパラメータをに追加する必要があります。

実際のSQL文も疑わしいです。現在、2つのパラメータのビット単位ANDが行のIdと一致する行を削除しています。それはあなたが欲しいものですか?

+2

正しいSQLは 'RecipeIngredient WHERE RecipeId = @RecipeId AND IngredientId = @ IngredientId'の近くにある可能性があります。 –

+0

Ericは、ユーザーが最も好きなものを満たすためにDELETE構文をどのように変更できるかについて、良い点を挙げています。 BITWISEはおそらく一部の読者にはあいまいですが、https://msdn.microsoft.com/en-us/library/ms174965.aspxに関する記事があります。 – Matt

関連する問題