这个问题是第二次来问了。下面这个例子是我在《亲密接触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系统,结果和以前一样了,又出现上面的错误。
很郁闷,为什么这么简单的一个例子却有这么多的错误????
源程序如下:
<% @ 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系统,结果和以前一样了,又出现上面的错误。
很郁闷,为什么这么简单的一个例子却有这么多的错误????
catch( Exception ex )
{
Response.Write(ex.ToString() );//看看具体错误}
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
我有权限,如果换用SQL语句就不会出错。
为什么那个错误刚开始有,后来怎么就没出现呢?我并没动它什么呀。
现在只是重装了系统,又同样出现这种错误。这种异常是什么?
回复:swordragon(古道热肠)
我有权限,如果换用SQL语句就不会出错。
估计你换得是select语句,所以没错。mdb文件 - 右键 - 属性 - 安全 - 追加可写的权限
添加一个everyone 用户,赋予全部权限,试试。
你的猜想完全错误!
我是用SQL语句插入同样的内容。
即:insert into message(name,message) values("你好","测试")
这问题和: ChengKing(bantamweight)说得差不多,但不知怎么解决?
你是在Access中用sql语句插入的吧。
这是sql,数据库问题,
和asp.net程序没关系。
那就看看是不是恢复数据的时候表有问题,或者在绑定DataAdapter的时候有问题
这你就不知了。
我的硬盘是FAT32格式,从不用NTS格式。因为我还有用DOS的习惯。
我是用
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上.
我怎么监视MyAdapter.InsertCommand 的commandText属性?
首先确保你的mdb文件和路径没有问题,
然后给你mdb文件及其所在文件夹赋予asp.net和vsdeveloper两个帐户可以读写操作的权限。
如果你是win2003,同理,区别是要给net services帐户授权。
我是ACCESS数据库,所以都是有主键为ID的。我以前操作成功了,说明这与数据库本身的问题不大。
我怎么才能得到dbDataAdapter 生成的insertCommand.CommandText的值。
我不晓得它生成什么值呀。是用catch( Exception ex )捕捉到异常的结果吧?如果是那些,我贴出来的。
------------------------
设置端点,然后调试时在命令窗口?后边写上要打印的变量。不会运用调试技术,怎么开发程序呀。开发手段太低级了吧?!
我用的是DW写代码,有时用记事本。我没准备开发程序,以前是做网站的,现在还只是用在网页上。
所以有VS2003,但也不会用。
大虾教下!
我换成SQL数据库就可以正常了。等我再返回ACCESS的时候竟然也可以正常访问了。
现在的问题是我用ACCESS数据库时,可以用:
dr=MySet.Tables["message"].Rows[0];
dr["name"] = "更新";
dr["message"] = "更新成功";
语句更新,但我换成数据结构完全相同的SQL SERVER2000数据库时,却又出错了,出错信息如下:
------------
对于不返回任何键列信息的 SelectCommand 不支持 DeleteCommand 的动态 SQL 生成。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 对于不返回任何键列信息的 SelectCommand 不支持 DeleteCommand 的动态 SQL 生成。
现在的问题是访问SQL SERVER 2000出问题呀.
帮你顶一下。
http://community.csdn.net/Expert/topic/4327/4327720.xml?temp=.8204615