错误提示:”操作必须使用一个可更新的查询“,哪里错了,附上代码
代码如下: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();
这句 --------------------编程问答--------------------
是不是要在本地修改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