0

以下のコードでは、「更新には、削除された行を含む DataRow コレクションが渡されたときに有効な DeleteCommand が必要です。」平均?

foreach (DataGridViewRow item in this.dataGridView2.SelectedRows)
{
    fuelStopsDataSet1.Tables[0].Rows[item.Index].Delete();
}

this.fuelStopsTableAdapter.Update(this.fuelStopsDataSet1.FuelStops);
4

2 に答える 2

5

状況によっては、DeleteCommand を自動的に作成することができます (SelectCommand から推測されます)。

SqlDataAdapter da = new SqlDataAdapter("...SELECT Statement...", connection);
SqlCommandBuilder cmd_b = new SqlCommandBuilder(da); // this already creates 
// the Update- and DeleteCommands for the DA

これに関する記事は次のとおりです
。 http://msdn.microsoft.com/library/vstudio/tf579hcz.aspx

于 2013-07-04T21:39:06.603 に答える
3

これは、 を使用して、削除された(それらは)DataAdapterを含むテーブルを更新していることを意味します。次に、は指定され た を使用 して、データベース内のこの行を削除します。しかし、あなたはそれを提供していません。DataRowsRowStateDeletedDataAdapterDeleteCommand

したがって、それを提供する必要があります。

MSDN の例:

public static SqlDataAdapter CreateCustomerAdapter(
    SqlConnection connection)
{
    SqlDataAdapter adapter = new SqlDataAdapter();

    // Create the SelectCommand.
    SqlCommand command = new SqlCommand("SELECT * FROM Customers " +
        "WHERE Country = @Country AND City = @City", connection);

    // Add the parameters for the SelectCommand.
    command.Parameters.Add("@Country", SqlDbType.NVarChar, 15);
    command.Parameters.Add("@City", SqlDbType.NVarChar, 15);

    adapter.SelectCommand = command;

    // Create the InsertCommand.
    command = new SqlCommand(
        "INSERT INTO Customers (CustomerID, CompanyName) " +
        "VALUES (@CustomerID, @CompanyName)", connection);

    // Add the parameters for the InsertCommand.
    command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
    command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");

    adapter.InsertCommand = command;

    // Create the UpdateCommand.
    command = new SqlCommand(
        "UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
        "WHERE CustomerID = @oldCustomerID", connection);

    // Add the parameters for the UpdateCommand.
    command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
    command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");
    SqlParameter parameter = command.Parameters.Add(
        "@oldCustomerID", SqlDbType.NChar, 5, "CustomerID");
    parameter.SourceVersion = DataRowVersion.Original;

    adapter.UpdateCommand = command;

    // Create the DeleteCommand.
    command = new SqlCommand(
        "DELETE FROM Customers WHERE CustomerID = @CustomerID", connection);

    // Add the parameters for the DeleteCommand.
    parameter = command.Parameters.Add(
        "@CustomerID", SqlDbType.NChar, 5, "CustomerID");
    parameter.SourceVersion = DataRowVersion.Original;

    adapter.DeleteCommand = command;

    return adapter;
}

最後のコマンドはDeleteCommand.

于 2013-07-04T21:20:55.540 に答える