注册 登录
编程论坛 ASP.NET技术论坛

System.Data.OleDb.OleDbException: 无法保存;正被别的用户锁定

情假 发布于 2011-06-20 09:56, 1233 次点击
System.Data.OleDb.OleDbException: 无法保存;正被别的用户锁定。 在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) 在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) 在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) 在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) 在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) 在 System.Data.OleDb.OleDbCommand.ExecuteNonQuery() 在 config.RunSql(String str_Sql) 位置 d:\hosting\wwwroot\test3_qingdaoicp_com\htdocs\App_Code\config.cs:行号 101 在 admin_EditCompany.btnedit_Click(Object sender, EventArgs e) 位置 d:\hosting\wwwroot\test3_qingdaoicp_com\htdocs\Admin\EditCompany.aspx.cs:行号 115\
程序代码:
public config()
    {

    }
    public static OleDbConnection CreateConnection()  //数据库连接
    {
        OleDbConnection conn = new OleDbConnection(Globals.ConnectionString);
        conn.Open();
        return conn;
    }
    public static OleDbDataReader GetReader(string str_Sql)
    {
        OleDbConnection conn = CreateConnection();
        OleDbCommand comm = new OleDbCommand(str_Sql, conn);
        OleDbDataReader dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
        return dr;
    }

这个是后台修改数据的。。字数少于1000左右时都不会有问题   字数多了就出这个错
6 回复
#2
冰镇柠檬汁儿2011-06-20 10:01
select * from table1 (no lock) where ...
你试试这样得写法
#3
kevintang2011-06-20 11:32
你是不是 access 数据库打开着! 你关闭你的数据库 再做操作!
#4
冰镇柠檬汁儿2011-06-20 15:37
才发现楼主用的居然是oledb
#5
情假2011-06-21 21:04
这个是后台的、一般没别人会进、而且修改别的都没问题。   我觉得可能还是那个在线编译器的问题。字太多了就这样。就是不知道怎么解决
#6
Issac_abc2011-06-22 20:35
   if (conn.State == ConnectionState.Closed || conn.State == ConnectionState.Broken) conn.Open();试下,
#7
wangnannan2011-06-24 12:35
分析下应该大致有三个原因
1 解决方法:

     首先判断数据库打开还是关闭

 OleDbConnection conn = this.con();
        if (conn.State != ConnectionState.Open)
        {
            conn.Open();
            OleDbCommand cmd = new OleDbCommand(sql, conn);
            cmd.ExecuteNonQuery();
            conn.Close();
        }
        else
        {
            conn.Close();
        }
跟Access数据库有关系,Access数据库的访问是独占的,所以很容易出现你这个错误。
         原因就是你的页面中,可能有其他代码也访问数据库了,且还没完全释放数据库连接(不仅是这一处代码)。所以造成数据库锁定的问题。

可以考虑将所有的连接语句,全部用上了using(){}构造

判断后即可
2 程序效率太低,然后CPU又不足够快.
新用户使用数据库时或下一次使用数据库时上一次的还没执行完
3 IIS 的问题

[ 本帖最后由 wangnannan 于 2011-6-24 12:39 编辑 ]
1