我在按钮中使用以下代码从gridview中删除一行:
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;
}
这个方法也在webservice中,这基本上更新了数据库:
[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,System.Data.Comd.Db) DataTableMapping tableMapping)位于e:\ web \ App_Code \ Service.cs中的Service.ModifyDatabase(DataSet myDataset)的System.Data.Common.DbDataAdapter.Update(DataSet dataSet,String srcTable):第183行---内部异常堆栈的结束痕迹---
3 回答
调用DataSet.AcceptChanges()方法来提交更改 .
该错误告诉您,当您调用
Update()
时,它可以确定要传递给它正在创建的删除语句的内容 .您的数据库表是否定义了主键?