我的代码:
OleDbConnection thisConnection=new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\new\news.mdb");
thisConnection.Open();
OleDbDataAdapter thisAdapter = new OleDbDataAdapter("SELECT CustomerID,CompanyName FROM Customers",thisConnection);
OleDbCommandBuilder thisBuilder = new OleDbCommandBuilder(thisAdapter);DataSet ds= new DataSet();
thisAdapter.Fill(ds,"Customers");Label1.Text=ds.Tables["Customers"].Rows.Count.ToString();
DataColumn[] keys= new DataColumn[1];
keys[0]=ds.Tables["Customers"].Columns["CustomerID"];
ds.Tables["Customers"].PrimaryKey=keys;
DataRow FindRow =ds.Tables["Customers"].Rows.Find("id号码99");
if(FindRow!=null)
{FindRow.Delete();
thisAdapter.Update(ds,"Customers");
thisAdapter.Fill(ds,"Customers");
}
Label2.Text=ds.Tables["Customers"].Rows.Count.ToString();
thisConnection.Close();
Access数据库
抛出异常:System.InvalidOperationException: 对于不返回任何键列信息的 SelectCommand 不支持 DeleteCommand 的动态 SQL 生成.
数据库里也设置了主键的.对数据库的添加、修改都没问题.就只删除会抛出异常........

解决方案 »

  1.   

    protected void AdapterUpdate()
    {
        System.Data.SqlClient.SqlConnection cnn = new System.Data.SqlClient.SqlConnection("连接字符串");
        System.Data.SqlClient.SqlCommand cm = new System.Data.SqlClient.SqlCommand();
            
        cm.Connection = cnn;
        cm.CommandText = "select top 10 * from table1";
        System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(cm);    DataTable dt = new DataTable();
        da.Fill(dt);
        da.FillSchema(dt,System.Data.SchemaType.Mapped);//这是必须的,要载入数据表结构,如果不从数据库载入表结构,则至少需要手工写代码设置DataTable的主键
        
        //下面插入多条数据
        for(int i=0;i<10;i++)
        {
            DataRow newRow = dt.NewRow();
            newRow[0] = 123;
            newRow[1] = "abc";
            //....
            dt.Rows.Add(newRow);
        }
        //下面重新写回数据库
        System.Data.SqlClient.SqlCommandBuilder cb = new System.Data.SqlClient.SqlCommandBuilder(da);//这句看起来没什么作用,但实际上很关键,如果没有这个就不能用da.Update方法
        cnn.Open();
        da.Update(dt);
        cnn.Close();    dt.AcceptChanges();
    }