1

リストボックスからアイテムを選択するときに、選択したアイテムを削除したい。選択したデータがデータベースから削除されたときに機能しないのはなぜですか? 私は何かを逃したに違いない。オブジェクト タイプからのマッピングが存在しませんというエラー メッセージが表示 されました。

これはメソッド パラメータです。

  IsDelete = _dinnerRemover.RemoveDinners(lstDinner.SelectedItems);

このクラスは、データベースからデータを削除することです

public bool RemoveDinners(dynamic dinnerItems)
{
    Dinners = new List<FoodInformation>();
    using (var sqlConn = new SqlConnection(_sqlConnectionString))
    {

        const string sqlQuery = "delete from DinnerTemplates where Dinner = @dinner";

        using (var command = new SqlCommand(sqlQuery, sqlConn))
        {
            try
            {
                //command.CommandType = CommandType.StoredProcedure;
                //command.CommandText = "sp_dinner";
                foreach (var item in dinnerItems)
                {
                    command.CommandType = CommandType.Text;
                    command.Parameters.AddWithValue("@dinner", item);
                    command.ExecuteNonQuery();

                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                sqlConn.Close();
            }
        }
    }

    return Dinners;
}
4

4 に答える 4

0

動的型を使用しないで、文字列を使用してください..もし私があなただったら、むしろ

IsDelete = _dinnerRemover.RemoveDinners(lstDinner.SelectedItems.ToString());

パラメータを次のように変更します。

public bool RemoveDinners(string dinnerItems)

およびへのクエリ:

const string sqlQuery = "delete from DinnerTemplates where Dinner = dinnerItems";
于 2013-06-19T13:22:09.113 に答える
0

DinnerItemその型に関連する行でエラーが発生しているため、a のような本当に関連するコードを省略していることに注意する必要があります。

ただし、そのエラーが発生する理由は、またはitemのような型にマーシャリングできないためです。stringint

それitemはおそらくカスタムクラスである可能性が高いためです。1 つのオプションはToString、クラスのメソッドをオーバーライドすることです。

public override string ToString() {
    // return some property value, or set of property values
    // strung together here.
}

別のオプションは、発行時にPropertyオフにしたい実際のものを送信することです。itemAddWithValue

于 2013-06-19T12:04:54.607 に答える