请教一个虚拟主机上asp.net+access数据库只读问题
1、我用的是虚拟主机,自己改不了文件的权限。
2、我用asp.net+Access做的东西,在本地调试没问题,但是上传到虚拟主机以后,可以正常浏览,不能添加、删除、更新数据。出现错误:System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询。
网上搜索,全都是一样的内容,说是要改文件权限,我用的是虚拟主机,改不了。
今天把虚拟主机上的文件全删除了,自己传了几个文件,专门去试这个问题:
新建了一个数据库db1.mdb,只有一个表test_table;字段id,test1
做了一个asp.net的文件,向这个表写入数据;
做了一个asp文件,向这个表写入数据;
都上传到虚拟主机以后:
1、先运行asp文件,可以正常读取,也可以正常写入数据,说明这个数据库db1.mdb的写入权限是有的;
2、再运行asp.net文件,能正常读取数据,但是往数据库写入数据,出现错误:System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询。
3、再回过头来运行asp文件,能正常读取,写入数据时出现错误信息:Microsoft JET Database Engine 错误 '80040e09'
不能更新。数据库或对象为只读。
也就是说,只要运行了asp.net文件,试图往数据库写入数据出错后,数据库就会变成只读的属性。
不管等多久都恢复不了,只有把根目录的web.config文件删除,asp文件才能正常插入数据。
貌似web.config对数据库是否只读影响很大。
所以想请教各位一下:对于虚拟主机用户,更改不了文件权限的,有没有其他方法解决这个问题呢?或者是我的asp.net代码写的有问题呢?
asp.net的代码
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OleDb;
using System.Text;
public class DBconn
{
public static OleDbConnection GetConnection()
{
string conn_str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\virtualHost\\web357544\\www\\db1.mdb;Persist Security Info=True;";
OleDbConnection conn = new OleDbConnection(conn_str);
return conn;
}
}
public partial class _Net : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
OleDbConnection myConn = DBconn.GetConnection();
myConn.Open();
string strSQL = "select top 1 * from test_table order by id desc";
OleDbCommand cmd = new OleDbCommand(strSQL,myConn);
OleDbDataReader dr = cmd.ExecuteReader();
dr.Read();
this.Label1.Text = "最后一次添加的数据:"+dr["test1"].ToString();
dr.Close();
myConn.Close();
}
protected void Button1_Click(object sender, EventArgs e)
{
string test_table = Request.Form["test_table"].ToString();
OleDbConnection myConn = DBconn.GetConnection();
myConn.Open();
string strSQL = "insert into test_table (test1) values ('"+test_table+"')";
OleDbCommand cmd = new OleDbCommand(strSQL,myConn);
cmd.ExecuteNonQuery();
myConn.Close();
Response.Redirect("Net.aspx");
}
}