当前位置:编程学习 > C#/ASP.NET >>

错误提示:”操作必须使用一个可更新的查询“,哪里错了,附上代码

代码如下:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
//using Socut;
using System.Data.SqlClient;
using System.Data.OleDb;

public partial class register : System.Web.UI.Page
{


  // public Socut.Data.CReader dr;
    //public Socut.CReader dr;
//CReader dr;
 // public CData myData = new CData();

    protected void Page_Load(object sender, EventArgs e)
    {
        
    }
    protected void Button1_Click(object sender, EventArgs e)
    {


        string strName = TB1.Text.ToString();
        string strPew = TB3.Text.ToString();
        string danweiming = TB4.Text.ToString();
        string damweidi = TB5.Text.ToString();
        string youzhengbian = TB6.Text.ToString();
        string shengfenzheng = TB7.Text.ToString();
        string dianhua = TB8.Text.ToString();
        string email = TB9.Text.ToString();

        if (user(strName))
        {
            RegisterStartupScript("", "<script language=javascript>alert('用户名存在');</script>");
            TB1.Text = "";
            TB2.Text = "";
            TB3.Text = "";
            TB4.Text = "";
            TB5.Text = "";
            TB6.Text = "";
            TB7.Text = "";
            TB8.Text = "";
            TB9.Text = "";
            TB1.Focus();
        }
        else
        {
            string strConnection = "provider = Microsoft.Jet.OLEDB.4.0;data source =" + HttpContext.Current.Server.MapPath("~/App_Data/user.mdb");
            OleDbConnection cn = new OleDbConnection(strConnection);
            cn.Open();//打开连接
            //得到当前的连接状态
            string strInsert = "insert into [user]([username],[password],[danweiming],[danweidi],[youzhengbian],[shengfenzheng],[dianhua],[email]) values('" + strName + "','" + strPew + "','" + danweiming + "','" + damweidi + "','" + youzhengbian + "','" + shengfenzheng + "','" + dianhua + "','" + email + "')";

            OleDbCommand sqlcmd = new OleDbCommand(strInsert, cn);
            //ExecuteNonQuery()方法来执行没有返回结果的命令
           sqlcmd.ExecuteNonQuery();            cn.Close();
            Response.Redirect("save.html");
        }
      
  /*
        dr = new CReader("SELECT * FROM socut_user WHERE u_name='" + TextBox1.Text + "'");

        if (dr.Read())
        {
            Label1.Text = "用户已被注册";
        }

        else
        {
            myData.GetExecuteNonQuery("INSERT INTO socut_user(u_name,u_pass) VALUES('" + TextBox1.Text + "','" + TextBox2.Text + "')");

            Label1.Text = "注册成功!";
        }
    */
       /*
         dr = new CReader("SELECT * FROM user WHERE username='" + TextBox1.Text + "'");

        if (dr.Read())
        {
            Label1.Text = "用户已被注册";
        }

        else
        {
            myData.GetExecuteNonQuery("INSERT INTO user(username,password) VALUES('" + TextBox1.Text + "','" + TextBox2.Text + "')");

            Label1.Text = "注册成功!";
        }
      */
    }

    public bool user(String username)
    {
        String suser = username;

        string strConnection = "provider = Microsoft.Jet.OLEDB.4.0;data source =" + HttpContext.Current.Server.MapPath("~/App_Data/user.mdb");


        OleDbConnection cn = new OleDbConnection(strConnection);
        cn.Open();//打开连接
        string strInsert = "select * from [user] where username='" + suser + "'";
        //建立Command对象   
        OleDbCommand sqlcmd = new OleDbCommand(strInsert, cn);
        //ExecuteNonQuery()方法来执行没有返回结果的命令
        //sqlcmd.ExecuteNonQuery();
        OleDbDataReader sdata = sqlcmd.ExecuteReader();
        Response.Write(sdata);
        if (sdata.Read())
        {
            return true;
        }
        else
        {
            return false;
        }





    }



    
}



错误提示:


“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

操作必须使用一个可更新的查询。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询。

源错误: 


行 65:             OleDbCommand sqlcmd = new OleDbCommand(strInsert, cn);
行 66:             //ExecuteNonQuery()方法来执行没有返回结果的命令
行 67:            sqlcmd.ExecuteNonQuery();
行 68:             cn.Close();
行 69:             Response.Redirect("save.html");
 


--------------------编程问答-------------------- sqlcmd.ExecuteNonQuery();

把这句注释掉,就不提示错误了,运行成功,但去查找数据库表,根本没插入数据。 --------------------编程问答-------------------- sql语句有问题,肯定、 --------------------编程问答-------------------- 操作必须使用一个可更新的查询 --------------------编程问答-------------------- 百度查,说是 权限问题,可我给它添加了everyone,给它完全控制,也没用。 --------------------编程问答-------------------- 单步调试,看看是具体哪出问题,然后把调试看到的SQL语句到DB里面执行试下。 --------------------编程问答-------------------- 把access数据库文件只读去掉。加上everyone SQL语句也看一下 --------------------编程问答-------------------- 看看最终拼成的SQL是什么样子 --------------------编程问答-------------------- everyone已经加上,只读也去掉了,还是不行 --------------------编程问答--------------------

            string strConnection = "provider = Microsoft.Jet.OLEDB.4.0;data source =" + HttpContext.Current.Server.MapPath("~/App_Data/user.mdb");
            OleDbConnection cn = new OleDbConnection(strConnection);
            cn.Open();//打开连接
            //得到当前的连接状态
            string strName = "test";
            string strPew = "123";
            string danweiming = "danweiming";
            string damweidi = "damweidi";
            string youzhengbian = "youzhengbian";
            string shengfenzheng = "shengfenzheng";
            string dianhua = "dianhua";
            string email = "email";
            string strInsert = "insert into [user]([username],[password],[danweiming],[danweidi],[youzhengbian],[shengfenzheng],[dianhua],[email]) values('" + strName + "','" + strPew + "','" + danweiming + "','" + damweidi + "','" + youzhengbian + "','" + shengfenzheng + "','" + dianhua + "','" + email + "')";

            OleDbCommand sqlcmd = new OleDbCommand(strInsert, cn);
            //ExecuteNonQuery()方法来执行没有返回结果的命令
            sqlcmd.ExecuteNonQuery();

            Response.Write("没事就输入吧");


代码没有问题,应该是参数或者权限设置


--------------------编程问答-------------------- 会不会是web.config里要修改什么? --------------------编程问答-------------------- 本地调试可以成功,就是上传到虚拟空间上不行 
难道是虚拟空间的问题? --------------------编程问答--------------------

看一下这里 --------------------编程问答-------------------- 你用的ACCESS,跟空间应该没问题。没插入数据那就看看有没有执行到sqlcmd.ExecuteNonQuery();

这句 --------------------编程问答--------------------
引用 12 楼 liuchaolin 的回复:
看一下这里



是不是要在本地修改IIS? 我上传到虚拟空间上,跟IIS会有关系么? --------------------编程问答-------------------- 代码没有问题,应该是参数或者权限设置


权限我改了啊 ,参数是哪个? --------------------编程问答-------------------- conn.Mode=adModeReadWrite;
会不会是这句没下去啊 ,可我把这句放进代码里,编译都通不过,该怎么写 --------------------编程问答-------------------- 数据库表,你看一下字段是否都允许输入空字符串 --------------------编程问答-------------------- 测试了,不允许 跟这个有关系么? --------------------编程问答-------------------- 能不能帮我调试下 --------------------编程问答-------------------- SQL语句是没有问题的,问题应该出在数据库上,除了主键外的字段都要设置成允许为空 --------------------编程问答-------------------- 数据库本身是可以主键外其他都为空的,但代码上有验证控件,要求每个都是必须填写的,会是这里的问题吗? --------------------编程问答-------------------- 1。最普遍的原因是匿名用户帐号(IUSR_MACHINE)对该数据库文件没有写权限。 
要解决这个问题,在管理器中调整数据库文件的属性,让匿名用户有正确的权限。 
当使用ACCESS数据库时,不仅要给文件写的权限,还要给该目录写 的权限,因为 
Jet需要在该目录建立一个.ldb文件。 

这里,给文件写的权限 和 给该目录写的权限 有区别吗?  
什么是目录写的权限? --------------------编程问答-------------------- IUSR_MACHINE这个是不用管的



--------------------编程问答-------------------- 单步调试,注意sql语句里面传入的值,肯定是这里数据的类型出现错误了,修改一下就好了,最好就是单步调试的时候把sql语句可视化复制以后去数据库查询一下,数据库会提示你具体哪里错误。 --------------------编程问答-------------------- 原来用户在请求web页面时win2003服务器使用系统内置的的IIS_WPG组的帐户来访问Access数据库,若IIS_WPG组的帐户没有Access数据库文件的"修改"权限,就会产生这个异常。
"IIS_WPG"用户组是用于访问和管理IIS信息的内置帐户,默认情况下对IIS中虚拟目录的文件只有"读取"

解决方法一:
在Access数据库文件上单击右键->属性->安全
单击添加,在文本框中输入"IIS_WPG",单击确定,
给IIS_WPG设置权限,选中"允许写入",确定OK!

方法二:
按上面步骤添加Ervryone用户,并且给Everyone赋写入权限。
IIS_WPG 是Win2003的用户,如果是win2000的话,查找IWAM_machin(machine是机器名称)

http://blog.csdn.net/niehoude/article/details/4403243

补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,