访问数据库 - 操作必须使用可更新的查询。 (在本地工作正常)

Posted

技术标签:

【中文标题】访问数据库 - 操作必须使用可更新的查询。 (在本地工作正常)【英文标题】:Access Database - Operation must use an updateable query. (Works fine on local) 【发布时间】:2018-04-18 14:12:32 【问题描述】:

我在输入标题时检查了其他问题,我无法理解了。我需要冷静一下:)

我在 1.5 周前开始使用 asp.net,在本地一切正常,我将站点文件上传到 ftp 服务器,但出现此错误:

操作必须使用可更新的查询。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 异常详细信息:System.Data.OleDb.OleDbException:操作必须使用可更新查询。 源错误: //* Goruntulenme sayısını günelleme //翻译更新视图计数 *

    // This was the old code after checking other same titled questions i changed to this one and still no luck
    //sorgu.Append(" UPDATE sorular SET [goruntulenme] = [goruntulenme] + 1 ");
    //sorgu.Append(" WHERE soruid = @soruid ");
    //komut = new OleDbCommand(sorgu.ToString(), baglanti);
    //komut.Parameters.Add("@soruid", OleDbType.VarChar).Value = sorgusoruid.ToString();
    //komut.ExecuteNonQuery();
    string SqlString = "UPDATE sorular SET [goruntulenme] = [goruntulenme] + 1 WHERE soruid = ?";
    using (OleDbCommand cmd = new OleDbCommand(SqlString, baglanti))
    
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("soruid", sorgusoruid.ToString());
        cmd.ExecuteNonQuery();
    

错误指向那个 cmd.ExecuteNonQuery();线。我检查的东西: *表有一个主键 *代码就像我需要的一样在本地工作 *这是我项目的论坛部分,最简单的方法是我有 3 个表“用户”“问题”和“答案” *我可以在服务器上登录和注销。它工作正常,但无法更新。我想我怀疑权限,因为此登录代码有效(如果您愿意,我可以翻译代码的可变部分)。

OleDbConnection baglan = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("App_Data\\db.accdb"));
    baglan.Open();
    string k_ad = Kullanici.Text;
    string k_sifre = sifre.Text;
    OleDbCommand kontrol = new OleDbCommand("SELECT * FROM Kullanicilar WHERE K_Ad='" + k_ad + "' and K_Sfr='" + k_sifre + "'", baglan);
    OleDbDataReader oku = kontrol.ExecuteReader();

    if (oku.Read())
    
        Session.Add("Kullanici", k_ad);
        Response.Redirect("Forum.aspx");
        lbl.Visible = false;
    
    else
    
        lbl.Text = "Kullanıcı adı veya şifre yanlış";
        lbl.Visible = true;
    
    baglan.Close();
    baglan.Dispose();

我不知道我还能在这里提供什么信息。请让我知道您是否需要有关此的更多信息以及如何找到该信息:)) 哦,我正在使用 ms-access 数据库,使用 sql 数据库服务器对我来说似乎更复杂。

【问题讨论】:

仔细检查以确保运行您的应用程序池的帐户对您的数据库文件所在的文件夹具有写入权限。 您正在使用易受 SQL 注入攻击的查询字符串连接 - 请改用参数。请注意,如果 SET 和/或 WHERE 子句使用聚合函数,则查询是不可更新的。 哦,这就是为什么这个可以工作的原因,,,因为它的查询不是由聚合函数组成的。     OleDbCommand kontrol = new OleDbCommand("SELECT * FROM Users WHERE Usr_name='" + username + "' and Usr_pw='" + password + "'", connect); squillman here 对数据库文件夹的权限我找对地方了Permissions at Filezilla 不是 ftp 权限。您要上传到的服务器是什么?是 Windows / IIS 吗? 【参考方案1】:

问题解决了,我在托管服务提供商的网站上更改了数据库文件夹权限删除和更改所有权

【讨论】:

以上是关于访问数据库 - 操作必须使用可更新的查询。 (在本地工作正常)的主要内容,如果未能解决你的问题,请参考以下文章

Excel 数据到 Access DB - 获取:操作必须使用可更新查询错误

Access DB:操作必须使用可更新的查询

更新行给出错误操作必须使用可更新查询

Paradox 插入数据操作必须使用可更新查询

部署后“操作必须使用可更新查询”

Access 2016 - 简单更新查询给出“操作必须使用可更新查询”错误