用asp.net(c#)连接access之后读数据正常
但写数据始终出错源程序如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.OleDb"%><%@ Page Language="c#"  runat="server" debug=true%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>用户注册</title>
</head><h1>用户注册</h1>
<hr>
<body link=bbrrbb alink=rrggrr vlink=ggbbgg>
<%
string strConnection="Provider=Microsoft.Jet.OleDb.4.0;";
strConnection+=@"Data Source=D:\Program Files\html\客户信息.mdb"; string strSQL="insert into usr(id,code,property) values('usr','usr','g')"; OleDbConnection objConnection=new OleDbConnection(strConnection);
OleDbCommand objCommand=new OleDbCommand(strSQL,objConnection);

objConnection.Open();
objCommand.ExecuteNonQuery();
objConnection.Close();
con_open.Text="connection opened successfull!";


%>
<asp:label ID="con_open" runat="server"/><br/>
</body>
</html>浏览器显示如下:
“/aspx”应用程序中的服务器错误。
--------------------------------------------------------------------------------操作必须使用一个可更新的查询。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询。源错误: 
行 30: 
行 31:  objConnection.Open();
行 32:  objCommand.ExecuteNonQuery();
行 33:  objConnection.Close();
行 34:  con_open.Text="connection opened successfull!";
 源文件: D:\Program Files\html\用户注册.aspx    行: 32 堆栈跟踪: 
[OleDbException (0x80004005): 操作必须使用一个可更新的查询。]
   System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr) +41
   System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +174
   System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +92
   System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +65
   System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +112
   System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +67
   ASP.用户注册_aspx.__Render__control1(HtmlTextWriter __output, Control parameterContainer) in D:\Program Files\html\用户注册.aspx:32
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +27
   System.Web.UI.Control.Render(HtmlTextWriter writer) +7
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
   System.Web.UI.Page.ProcessRequestMain() +1929 

解决方案 »

  1.   

    权限不够。将access所在文件夹的everyone赋所有权限
      

  2.   

    如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题(非原创,摘自书中) 
    问题分析:分析一下用户访问的情况,用户请求web页面,服务器使用系统内置的的IIS_WPG组的帐户来访问Access数据库,若IIS_WPG组的帐户没有Access数据库文件的"修改"权限,就会产生这个异常"IIS_WPG"用户组是用于访问和管理IIS信息的内置帐户,默认情况下对IIS中虚拟目录的文件只有"读取"权限.解决方法:在Access数据库文件上单击右键->属性->安全单击添加,在文本框中输入"IIS_WPG",单击确定,给IIS_WPG设置权限,选中"允许写入",确定OK!---------------------------------------------
    有时查不到安全选项卡怎么办?找到数据文件夹所在地,在窗口上找到工具-->文件夹选项-->查看-->使用简单文件共享(推荐)的勾去掉,
    然后按上面写的做即可
    -------------------------------
    方法二:在ervryone 中给读权限,即可
      

  3.   

    using System;
    using System.Data.OleDb;class OleDbTest{public static void Main()
    {
    //创建数据库连接
    OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\db1.mdb");//创建command对象并保存sql查询语句
    OleDbCommand aCommand = new OleDbCommand("select * from emp_test", aConnection);
    try
    {
    aConnection.Open();//创建datareader 对象来连接到表单
    OleDbDataReader aReader = aCommand.ExecuteReader();
    Console.WriteLine("This is the returned data from emp_test table");//循环遍历数据库
    while(aReader.Read())
    {
    Console.WriteLine(aReader.GetInt32(0).ToString());
    }//关闭reader对象
    aReader.Close();//关闭连接,这很重要
    aConnection.Close();
    }//一些通常的异常处理
    catch(OleDbException e)
    {
    Console.WriteLine("Error: {0}", e.Errors[0].Message);
    }
    }
    }