在 asp.net(访问数据库)中编写更新查询(visual basic)

Posted

技术标签:

【中文标题】在 asp.net(访问数据库)中编写更新查询(visual basic)【英文标题】:Writing an update query in asp.net (access database) (visual basic) 【发布时间】:2008-12-06 07:22:23 【问题描述】:

我有这个代码:

    Dim pathString As String = HttpContext.Current.Request.MapPath("Banking.mdb")
    Dim odbconBanking As New OleDbConnection _
             ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
             "Data Source=" + pathString)
    Dim sql As String
    sql = "UPDATE tblAccounts balance = " & CDbl(balance + value) & " WHERE(accountID = " & accountID & ")"
    odbconBanking.Open()
    Dim cmd As New OleDbCommand(sql, odbconBanking)
    cmd.ExecuteNonQuery()

但是,当我运行它时会引发异常: UPDATE 语句中的语法错误。

我尝试在 Access 中运行类似的语句,它运行良好。

【问题讨论】:

【参考方案1】:

我认为缺少的是 SET。

尝试:UPDATE table SET field = newvalue WHERE条件;

只需修改:

sql = "UPDATE tblAccounts SET balance = " & CDbl(balance + value) & " WHERE(accountID = " & accountID & ")"

http://office.microsoft.com/en-us/access/HA100765271033.aspx

【讨论】:

【参考方案2】:

SQL 语句肯定缺少 SET 关键字。另外,我建议你复习parameterized query:

Dim sql As String = "UPDATE tblAccounts " & _
                    "SET balance = ? " & _
                    "WHERE(accountID = ?)"

Dim cmd As New OleDbCommand(sql, odbconBanking)

cmd.Parameters.Add("Balance", CDbl(balance + value))
cmd.Parameters.Add("AccountId", accountID

cmd.ExecuteNonQuery()

这样,不仅SQL语句更清晰,还有助于防止可能的SQL注入攻击。

【讨论】:

【参考方案3】:

您缺少 SET 作为 UPDATE 的一部分。

应该是 UPDATE tablename SET fieldname = ... WHERE [criteria]。

顺便说一句,您在 asp.net 中使用了经典的 asp 样式代码。我建议阅读 ASP.net 上的一些文档以及如何以分层方式设计应用程序。

【讨论】:

非常感谢。关于正确的设计,您有网址吗?或者什么是关于这个主题的好书?谢谢。【参考方案4】:

这里是一个好的开始:企业图书馆的数据访问应用程序块

链接:http://aspnet.4guysfromrolla.com/articles/030905-1.aspx

【讨论】:

以上是关于在 asp.net(访问数据库)中编写更新查询(visual basic)的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 一个数据访问层的封装

在 asp.net mvc 中编写查询的正确位置 [关闭]

在 asp.net 应用程序中更新查询语法错误

大型查询如何在 C#/ASP.NET MVC 4 部分中返回结果

ASP.Net https v/s http

解决ASP.NET Core部署到IIS,更新项目"另一个程序正在使用此文件,进程无法访问"