【发布时间】: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")
【问题讨论】: