string strcmd="Provider=Microsoft.Jet.OleDb.4.0;data source=e:/test.mdb;";
string strcmd1="INSERT INTO book (bookname,price,total) VALUES (wert,'wwq','wqw')";
OleDbConnection ocn=new System.Data.OleDb.OleDbConnection(strcmd);
OleDbCommand insertcmd=new System.Data.OleDb.OleDbCommand(strcmd1,ocn); 
ocn.Open(); 
insertcmd.ExecuteNonQuery(); //折一句话的问题
ocn.Close(); 
//为什么上面的代码总会报错
错误的代码为:
    操作必须使用一个可更新的查询。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错
    误以及代码中导致错误的出处的详细信息。 
    异常详细信息: System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询。//郁闷了好久,达人给于解答哈哈//注下面的代码没有问题.
/*Response.Write(ocn.ServerVersion+"  "+ocn.State.ToString()+"</br>");          
  strcmd="SELECT * from login";
  oda=new System.Data.OleDb.OleDbDataAdapter(strcmd,ocn); 
  ds=new DataSet(); 
  oda.Fill(ds,"login");            
  DataGrid1.DataSource=ds.Tables["login"].DefaultView;
  DataGrid1.DataBind(); */

解决方案 »

  1.   

    把mdb文件的读写权限给asp.net用户,要是不行就给everyone
      

  2.   

    string strcmd1="INSERT INTO book (bookname,price,total) VALUES (wert,'wwq','wqw')";
    其中VALUES (wert,'wwq','wqw')";对吗?仔细检查
      

  3.   

    所以报你执行错误,因为SQL语句是错的
      

  4.   

    1.確認你得SQL語句可行,你可copy 到access里執行看看
    2.請確定對access文件有可寫權限
      

  5.   

    VALUES (wert,'wwq','wqw')";这个应该是肯定不对的,这个wert是什么,是什么类型的?如果wert是int型的,并且wert是个后台的变量,应该这样string strcmd1="INSERT INTO book (bookname,price,total) VALUES ("+wert.ToString()+",'wwq','wqw')";
    如果是VARCHAR型的变量string strcmd1="INSERT INTO book (bookname,price,total) VALUES ('"+wert.ToString()+"','wwq','wqw')";