如何使用 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 向数据库中添加一行?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Openoffice calc excel 连接到 sql server 而不是 asp.net 中的 oledb excel 连接
如何在 ASP.NET Core MVC 中添加分页,在 AJAX 调用中动态创建的表上