以下代码在运行到:
thisAdapter.Update(thisDataSet, "cardno");时 报
“对于不返回任何键列信息的 SelectCommand,不支持 DeleteCommand 的动态 SQL 生成。”
求助应如何更改才能正确完成该删除操作?代码:
            DataRow[] thisRow1;
            thisAdapter = new OleDbDataAdapter("select * from cardno",thisConnect);
            thisComm = new OleDbCommandBuilder(thisAdapter);
            thisDataSet = new DataSet();
            thisAdapter.Fill(thisDataSet, "cardno");
            string selectStr="rm_num="+"'"+textRmnum.Text+"'";
            thisRow1 = thisDataSet.Tables["cardno"].Select(selectStr);
            for (int i = 0; i < thisRow1.Length; i++)
            {
                thisRow1[i].Delete();
            }
            thisAdapter.Update(thisDataSet, "cardno");

解决方案 »

  1.   

    另,为什么这段代码就能正确执行?
    thisAdapter = new OleDbDataAdapter(@"select * from cardno",thisConnect);
    thisComm = new OleDbCommandBuilder(thisAdapter);
    thisDataSet = new DataSet();
    thisAdapter.Fill(thisDataSet, "cardno");
    thisRow = thisDataSet.Tables["cardno"].NewRow();
    thisRow["rm_num"] = textRmnum.Text;
    thisRow["cardno"] = textCardno.Text;
    thisDataSet.Tables["cardno"].Rows.Add(thisRow);
    thisAdapter.Update(thisDataSet, "cardno");
      

  2.   

    表未设置 主键!
    查看下 表是否有主键?没有,就添加!
    有,还错误,加这句话
    myDataTable.PrimaryKey=new DataColumn[]{myDataTable.Columns["email"]};
    为表设置下主键还有你这删除有问题!
     for (int i = 0; i < thisRow1.Length; i++) 
                { 
                    thisRow1[i].Delete(); 
                } 改:
     for (int i = 0; i < thisRow1.Length; i++) 
                { 
                    thisRow1[i].Delete(); 
                     i--;
                } 
      

  3.   

    http://www.36588.com.cn/digital/article/article_15867_1.html
      

  4.   

    楼主可以直接用SQL的删除语句操作
    就是删除所有rm_num等于textRmnum.Text的记录            OleDbConnection conn = new OleDbConnection( "你的链接字符串" );
                conn.Open();            OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = conn;
                cmd.CommandText = "DELETE from cardno where rm_num='" + textRmnum.Text + "'";
                cmd.ExecuteNonQuery();            conn.Close();
      

  5.   

    这个我也写过了 也没问题 
    可我觉着是不是现在dataset里面删掉在对数据库作更新更加安全些 所以目前希望能按照这个顺序写代码
    因此遇到了以上问题。望高人解答
      

  6.   

    老大,谁说他就更安全的啊,他最终不也通过SELECT、UPDATE、DELETE语句实现的啊
      

  7.   

    可以啊  先对DataSet里面的DataRow集合进行更新,最后将更新提交到数据库不是解决了嘛!
      

  8.   

    你又没对SqlDataAdapter构建DeleteCommand,它虽然会自己生成,但没主键它又不知道按什么删除
    你这不是难为微软么...
      

  9.   

    如果确实非要在dataset中操作,可以参考这个:
    http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqldataadapter.rowupdating%28VS.80%29.aspx
    自己实现onrowupdating事件。
      

  10.   


    是否应改成
      for (int i = thisRow1.Length-1; i>0; i--)
                {
                    thisRow1[i].Delete();
                }