Ich bin neu in ASP.NET und mit OLEDB. Ich versuche, einer Tabelle in einer ACCESS-Datenbank eine Zeile hinzuzufügen. Der Code liest zuerst, wie viele Zeilen ein Benutzer bereits hat, und wenn sie nicht über dem Limit sind, können sie eine neue Zeile einreichen. Ich habe einen Datensatz erstellt und das scheint in Ordnung zu sein. Das Problem ist, wenn ich versuche, die neue Zeile zurück in die Datenbank zu aktualisieren, fügt der Befehl Einfügen einen leeren Befehl, der die Anforderungen in Access-Datenbank fehlschlägt. Ich bin irgendwie verloren bei dem, was ich falsch mache.Wie füge ich eine Zeile zu einer Datenbank mit ASP.NET OLEDB hinzu?
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
Der Fehler Ich erhalte ist:
Beschreibung: Eine nicht behandelte Ausnahme während der Ausführung der aktuellen Webanfrage auf. Bitte überprüfen Sie die Stack-Trace für weitere Informationen über den Fehler und wo es aus dem Code stammt.
Ausnahmedetails: System.Data.OleDb.OleDbException: Syntaxfehler in INSERT INTO-Anweisung.
Quellfehler: Zeile 58: objAdapter.Update (objDataSet, "Tickets")
Gewöhnlich kann Jet/ACE durch die Klammerung der Objektnamen damit umgehen (Access ist hier überhaupt nicht beteiligt). –