“/”应用程序中的服务器错误(System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询)

问题描述:

        在云服务器上部署项目遇到的问题,系统是windows2008r2,部署完成后,打开页面,在修改数据提交时报错如下:

运行时错误 
说明: 服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全原因)。但可以通过在本地服务器计算机上运行的浏览器查看。 

详细信息: 若要使他人能够在远程计算机上查看此特定错误消息的详细信息,请在位于当前 Web 应用程序根目录下的“web.config”配置文件中创建一个 <customErrors> 标记。然后应将此 <customErrors> 标记的“mode”属性设置为“Off”。


<!-- Web.Config 配置文件 -->

<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>
 

注释: 通过修改应用程序的 <customErrors> 配置标记的“defaultRedirect”属性,使之指向自定义错误页的 URL,可以用自定义错误页替换所看到的当前错误页。


<!-- Web.Config 配置文件 -->

<configuration>
    <system.web>
        <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
    </system.web>
</configuration>
 

同样的问题解法一样,如下:

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

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

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪:

[OleDbException (0x80004005): 操作必须使用一个可更新的查询。]
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr) +41
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +174
System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +92
System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +65
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +112
System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +66
web.WebForm1.fzsbcounts()
web.WebForm1.Page_Load(Object sender, EventArgs e)
System.Web.UI.Control.OnLoad(EventArgs e) +67
System.Web.UI.Control.LoadRecursive() +35
System.Web.UI.Page.ProcessRequestMain() +750


解决办法

此问题的原因应该是没有写入和修改的权限。

右键此项目的文件夹(就是你发布的项目的文件夹),选择属性,打开安全,找到你的用户名,点击编辑,选择完全控制-->应用-->确定。

重新打开页面即可。

附图一张。



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个错误是由于SQL语句的参数没有被正确指定而引起的。在这个例子,问题可能出在SQL语句的`Label3.Text`参数上。为了解决这个问题,您可以尝试使用`OleDbCommand`对象和参数化查询来执行查询。下面是一个修改后的代码示例: ``` Dim connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Andrew\OneDrive\文件\研究生\油水\实验数据处理\油水分离实验数据数据库.mdb;") Dim query As String = "SELECT * FROM 含乳化剂 WHERE 分离效率 > ?" Dim adapter As New OleDbDataAdapter(query, connection) adapter.SelectCommand.Parameters.AddWithValue("@分离效率", Label3.Text) Dim dataset As New DataSet() adapter.Fill(dataset, "含乳化剂") DataGridView1.DataSource = dataset.Tables("含乳化剂") If DataGridView1.Rows.Count > 0 Then For Each row As DataGridViewRow In DataGridView1.Rows If row.Cells("分离效率").Value.ToString().Equals(Label3.Text) Then row.Selected = True Exit For End If Next Else MessageBox.Show("数据库查询到") Me.Close() Label3.Text = "" End If ``` 在这个例子,我们使用`OleDbCommand`对象和参数化查询来执行查询。在SQL语句,我们使用`?`来表示参数,然后在`adapter.SelectCommand.Parameters`集合添加相应的参数。在这种情况下,我们使用`AddWithValue`方法来添加一个参数,该参数的名称为`@分离效率`,值为`Label3.Text`。这样就可以将参数正确地指定到SQL语句,避免了“至少一个参数没有被指定值”的错误

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值