如何使用 ASP.NET OLEDB 向数据库中添加一行?

Posted

技术标签:

【中文标题】如何使用 ASP.NET OLEDB 向数据库中添加一行?【英文标题】:How do I add a row to a database with ASP.NET OLEDB? 【发布时间】:2009-08-17 19:29:52 【问题描述】:

我是 ASP.NET 和使用 OLEDB 的新手。我正在尝试向 ACCESS 数据库中的表添加一行。代码首先读取用户已有的行数,如果没有超过限制,则允许他们提交新行。我已经建立了一个数据集,这似乎很好。问题是当我尝试将新行更新回数据库时,插入命令会生成一个空白命令,这不符合 Access-Database 中的要求。我有点迷失在我做错了什么。

If Page.IsValid = True Then
        objConnection = New OleDbConnection(data_vars.dbConnString())
        objConnection.Open()

        strSQL = "SELECT * FROM tickets WHERE Created_by = " + CStr(Session("ID")) + " AND Status = 0"

        objAdapter = New OleDbDataAdapter(strSQL, objConnection)
        objAdapter.Fill(objDataSet, "tickets")

        If objDataSet.Tables("tickets").Rows.Count < CInt(ConfigurationManager.AppSettings("max_new_tickets")) And CInt(Session("access")) <= 1 Then
            'things are good so make ticket

            objTable = objDataSet.Tables("tickets")

            objRow = objTable.NewRow()

            objRow("name") = Server.htmlEncode(txtTName.Text)
            objRow("description") = Replace(Server.HtmlEncode(txtTDesc.Text), vbCrLf, "<br />")
            objRow("contact_pref") = Replace(Server.HtmlEncode(txtContactPref.Text), vbCrLf, "<br />")
            objRow("log") = "New ticket created on " + CStr(Now()) + " from " + Server.HtmlEncode(Request.ServerVariables("REMOTE_ADDR")) + " with " + Server.HtmlEncode(Request.ServerVariables("HTTP_USER_AGENT")) + "<br />"
            objTable.Rows.Add(objRow)

            'generate the update commands
            Dim objBuilder As New OleDbCommandBuilder(objAdapter)

            objAdapter.UpdateCommand = objBuilder.GetUpdateCommand()
            objAdapter.InsertCommand = objBuilder.GetInsertCommand()
            objAdapter.DeleteCommand = objBuilder.GetDeleteCommand()

            'debug ---
            lblError.Text = lblError.Text + "<br/>" + objBuilder.GetInsertCommand.CommandText

            dgDebug.DataSource = objTable.DefaultView
            dgDebug.DataBind()
            '----

            'update the database
            objAdapter.Update(objDataSet, "tickets")
        Else
            'customer (access level) exceeded new ticket max
            lblError.Text = "<b>Cannot create ticket.</b><br /> You currently have the maximum amount of newly opened tickets allowed. Please wait until a tech reviews some of your tickets before making new ones."
        End If

        objConnection.Close()
    End If

我得到的错误是:

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Data.OleDb.OleDbException:INSERT INTO 语句中的语法错误。

来源错误: 第 58 行:objAdapter.Update(objDataSet, "tickets")

【问题讨论】:

【参考方案1】:

在我的代码苦苦挣扎 2 小时后,我发现这个错误是由列名中的 Access Database 关键字引起的。

http://support.microsoft.com/kb/286335

重命名列名,效果很好。

【讨论】:

通常将对象名称括起来允许 Jet/ACE 设法处理它(这里根本不涉及 Access)。

以上是关于如何使用 ASP.NET OLEDB 向数据库中添加一行?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET OleDB 权限错误

如何将 Openoffice calc excel 连接到 sql server 而不是 asp.net 中的 oledb excel 连接

如何在 ASP.NET Core MVC 中添加分页,在 AJAX 调用中动态创建的表上

从 ASP.NET 向 MSAcess 添加记录

ASP.NET 3.5 C# 网站中的 Oledb 溢出错误

如何使用 OleDb 获取视图的结构/查询?