这个问题是第二次来问了。下面这个例子是我在《亲密接触ASP.Net》一书中抄的。
源程序如下:
<% @ Page Language="C#" Debug="true" ContentType="text/html" ResponseEncoding="gb2312"%>
<% @ Import Namespace="System.Data" %>
<% @ Import Namespace="System.Data.OleDb" %>
<% @ Import Namespace="System" %>
<script language="C#" runat="server">
public void Page_Load(Object src,EventArgs e)

  string MyconnStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Server.MapPath("..\\database\\message.mdb")+";";
  string SqlStr = "select * from message";
  
  DataSet MySet = new DataSet();
  
  OleDbConnection Myconn = new OleDbConnection(MyconnStr);
  OleDbDataAdapter MyAdapter = new OleDbDataAdapter(SqlStr,Myconn);
  OleDbCommandBuilder no = new OleDbCommandBuilder(MyAdapter);
  
  MyAdapter.Fill(MySet,"message");
  
  MyGrid.DataSource = MySet;
  MyGrid.DataMember = "message";
  MyGrid.DataBind();
 
  //插入一行
  DataRow dr = MySet.Tables["message"].NewRow();
  dr["name"] = "你好";
  dr["message"] = "插入成功。";
  MySet.Tables["message"].Rows.Add(dr);
 
  MyAdapter.Update(MySet,"message");
 
 New.DataSource=MySet;
 New.DataMember="message";
 New.DataBind();
 }
 }
</script>
<html>
<body>
<form Runat="server">
操作前
<asp:DataGrid id="MyGrid" Runat="server" AutoGenerateColumns="false">
<Columns>
  <asp:BoundColumn HeaderText="姓名" DataField="name"/>
  <asp:BoundColumn HeaderText="留言" DataField="message"/>
</Columns>
</asp:datagrid>
操作后
<asp:DataGrid ID="New" runat="server" HeaderStyle-BackColor="#CCCCCC" AutoGenerateColumns="false">
<Columns>
<asp:BoundColumn HeaderText="姓名" DataField="name"/>
<asp:HyperLinkColumn HeaderText="信息" 
                      DataTextField="message" 
  DataNavigateUrlField="name"
 DataNavigateUrlFormatString="DataSet_Operant_examples.aspx"
 />
</Columns>
</asp:DataGrid>
</form>
</body>
</html>
------------
我电脑有两个操作系统,一个是XP,一个是2003,刚开始在XP也不能运行,但不知怎么的,后来就可以正常运行了。而在2003一直不能运行,出现下面的错误:
------------
INSERT INTO 语句的语法错误。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: INSERT INTO 语句的语法错误。源错误: 
行 39:  // }catch(Exception) { Console.Write("数据操作失败");}
行 40:  
行 41:  MyAdapter.Update(MySet,"message");
行 42:  
行 43:  New.DataSource=MySet;
---------------
现在我又重装了那个xp系统,结果和以前一样了,又出现上面的错误。
很郁闷,为什么这么简单的一个例子却有这么多的错误????

解决方案 »

  1.   

    Update是经常出现错误.内部处理比较复杂,异常较多http://blog.csdn.net/chengking/archive/2005/08/26/465874.aspx
      

  2.   

    try{}
    catch( Exception ex )
    {
       Response.Write(ex.ToString() );//看看具体错误}
      

  3.   

    你没有操作mdb文件的权限!!!mdb文件 - 右键 - 属性 - 安全 - 追加可写的权限
      

  4.   

    打印出来的错误信息如下:
    System.Data.OleDb.OleDbException: INSERT INTO 语句的语法错误。 at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping) at System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable) at ASP.DataSet_Operant_examples_aspx.Page_Load(Object src, EventArgs e) in E:\MySite\Htdocs\asp.net\DataSet_Operant_examples.aspx:line 42
      

  5.   

    回复:swordragon(古道热肠)
    我有权限,如果换用SQL语句就不会出错。
      

  6.   

    回复: ChengKing(bantamweight)
    为什么那个错误刚开始有,后来怎么就没出现呢?我并没动它什么呀。
    现在只是重装了系统,又同样出现这种错误。这种异常是什么?
      

  7.   

    适应是权限的问题,将数据库所在的文件加加上asp_net可改写的权限
      

  8.   

    swordragon(古道热肠) 说得对
    回复:swordragon(古道热肠)
    我有权限,如果换用SQL语句就不会出错。
    估计你换得是select语句,所以没错。mdb文件 - 右键 - 属性 - 安全 - 追加可写的权限
    添加一个everyone 用户,赋予全部权限,试试。
      

  9.   

    回复:zhoumins(zm) 
    你的猜想完全错误!
    我是用SQL语句插入同样的内容。
    即:insert into message(name,message) values("你好","测试")
    这问题和: ChengKing(bantamweight)说得差不多,但不知怎么解决?
      

  10.   

    insert into message(name,message) values("你好","测试")
    你是在Access中用sql语句插入的吧。
      

  11.   

    你需要给你的mdb文件追加aspnet用户的可读写权限
      

  12.   

    INSERT INTO 语句的语法错误。
    这是sql,数据库问题,
    和asp.net程序没关系。
      

  13.   

    既然你重新安装了系统系统又给出那样的提示
    那就看看是不是恢复数据的时候表有问题,或者在绑定DataAdapter的时候有问题
      

  14.   

    回复: eyych(庆祝世界反法西斯战争胜利60周年!) 
    这你就不知了。
      

  15.   

    硬盘分区是什么格式的?如果是NTF的换成FAT32的试试!
      

  16.   

    回复: CNYAYA(小飞侠)
    我的硬盘是FAT32格式,从不用NTS格式。因为我还有用DOS的习惯。
      

  17.   

    有的人可能还没明白我的意思。
    我是用  
    DataRow dr = MySet.Tables["message"].NewRow();
      dr["name"] = "你好";
      dr["message"] = "插入成功。";
      MySet.Tables["message"].Rows.Add(dr);
    MyAdapter.Update(MySet,"message");
    来插入数据就出错。
    如果直接用SQL写,如:insert into message(name,message) values("你好","插入成功")就可以成功!
    这说明错误是出了.NET的组件Update上.
      

  18.   

    你可以监视一下MyAdapter.InsertCommand 的commandText属性,看看生成了什么的更新语句
      

  19.   

    回复: allanli(若尘) 
    我怎么监视MyAdapter.InsertCommand 的commandText属性?
      

  20.   

    单挑出语句写个小console程序看看,如果还不行就不是代码的问题,
    首先确保你的mdb文件和路径没有问题,
    然后给你mdb文件及其所在文件夹赋予asp.net和vsdeveloper两个帐户可以读写操作的权限。
    如果你是win2003,同理,区别是要给net services帐户授权。
      

  21.   

    唉,这么多层楼了,还是没有贴出 dbDataAdapter 生成的insertCommand.CommandText的值。叫人怎么诊断?胡乱诊断么?
      

  22.   

    你只要把dbDataAdapter生成的insertCommand.commandText自己替换上数据值,放到数据库本身的调试系统中去运行就行了。
      

  23.   

    回复:nowkok(小蜜蜂)
    我是ACCESS数据库,所以都是有主键为ID的。我以前操作成功了,说明这与数据库本身的问题不大。
      

  24.   

    回复: sp1234(我需要一月有40天)
    我怎么才能得到dbDataAdapter 生成的insertCommand.CommandText的值。
    我不晓得它生成什么值呀。是用catch( Exception ex )捕捉到异常的结果吧?如果是那些,我贴出来的。
      

  25.   

    我怎么才能得到dbDataAdapter 生成的insertCommand.CommandText的值
    ------------------------
    设置端点,然后调试时在命令窗口?后边写上要打印的变量。不会运用调试技术,怎么开发程序呀。开发手段太低级了吧?!
      

  26.   

    回复: sp1234(我需要一月有40天) 
    我用的是DW写代码,有时用记事本。我没准备开发程序,以前是做网站的,现在还只是用在网页上。
    所以有VS2003,但也不会用。
      

  27.   

    ASP.NET web应用程序可以支持调试吗?为什么我每次设置完断点点击绿色的三角号"启动",都跳出个框框说不行啊!
    大虾教下!
      

  28.   

    新发现!!!!!!!!!!
    我换成SQL数据库就可以正常了。等我再返回ACCESS的时候竟然也可以正常访问了。
    现在的问题是我用ACCESS数据库时,可以用:
      dr=MySet.Tables["message"].Rows[0];
      dr["name"] = "更新";
      dr["message"] = "更新成功";
    语句更新,但我换成数据结构完全相同的SQL SERVER2000数据库时,却又出错了,出错信息如下:
    ------------
    对于不返回任何键列信息的 SelectCommand 不支持 DeleteCommand 的动态 SQL 生成。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 对于不返回任何键列信息的 SelectCommand 不支持 DeleteCommand 的动态 SQL 生成。
      

  29.   

    name似乎是access的保留字段啊?
      

  30.   

    name不是ACCESS的保留字段吧?我以前用ASP,一直是直觉的,现在用ASP.NET也正常呀.
    现在的问题是访问SQL SERVER 2000出问题呀.
      

  31.   

    还是那个问题:asp.net web应用程序怎么调试?为什么我设置好断点,点击“启动”报错!to 楼主:找到答案后,记得贴出来啊。
    帮你顶一下。
      

  32.   

    我现在的问题见这个贴子:http://community.csdn.net/Expert/topic/4327/4327720.xml?temp=.8204615
      

  33.   

    这个问题已经转到另一个贴去了:
    http://community.csdn.net/Expert/topic/4327/4327720.xml?temp=.8204615