-1

ボタンで次のコードを使用して、グリッドビューから行を削除しています。

int i = GridView1.SelectedIndex;
tshirtSet.Tables["tshirts"].Rows[i].Delete();
GridView1.DataSource = tshirtset;
GridView1.DataBind();
localhost.Service mc = new localhost.Service();

mc.GetTshirtSet();
mc.ModifyDatabase(tshirtSet); <-------(Error on this line)

gridview は、データベースにリンクされている Web サービスによって使用されています。このメソッドは、データベースからデータを取得するために使用されます。

[WebMethod]
public DataSet GetTshirtSet()
{
    DataSet tshirtSet = new DataSet();
    string database = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|/shop.accdb;Persist Security Info=True";
    OleDbConnection myConn = new OleDbConnection(database);
    string queryStr = "SELECT * FROM tshirt";
    OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(queryStr, myConn);
    myConn.Open();
    myDataAdapter.Fill(tshirtSet, "Tshirt");
    myConn.Close();
    return tshirtSet;
}

このメソッドは Web サービスにもあり、これは基本的にデータベースを更新します。

[WebMethod]
public string ModifyDatabase(DataSet myDataset)
{
    string database = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|/shop.accdb;Persist Security Info=True";
    OleDbConnection myConn = new OleDbConnection(database);
    OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from tshirt", myConn);
    OleDbCommandBuilder builder = new OleDbCommandBuilder(myDataAdapter);
    builder.QuotePrefix = "[";
    builder.QuoteSuffix = "]";
    myConn.Open();
    myDataAdapter.Update(myDataset, "tshirt");
    myConn.Close();
    return "done";
}

これらは方法です。行を削除できないようです。何か提案はありますか?

System.Web.Services.Protocols.SoapException: サーバーは要求を処理できませんでした。---> System.InvalidOperationException: キー列情報を返さない SelectCommand に対して、DeleteCommand の動的 SQL 生成はサポートされていません。System.Data.Common.DbDataAdapter.UpdateFromDataTable (DataTable dataTable、 DataTableMapping tableMapping) at System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable) at Service.ModifyDatabase(DataSet myDataset) in e:\web\App_Code\Service.cs:line 183 --- 内部例外スタックの終わり痕跡 - -

4

3 に答える 3

0

DataSet.AcceptChanges() メソッドを呼び出して、変更をコミットします。

int i = GridView1.SelectedIndex;
tshirtSet.Tables["tshirts"].Rows[i].Delete();
tshirtSet.AcceptChanges();
于 2013-05-01T17:59:43.960 に答える