2009-08-17 5 views
1

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")

Antwort

0

Nachdem mit meinem Code für 2 Stunden zu kämpfen, fand ich diese Fehler durch Access-Datenbank Schlüsselwörter in den Spaltennamen verursacht wurde.

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

die Spaltennamen umbenannt und es funktionierte gut.

+0

Gewöhnlich kann Jet/ACE durch die Klammerung der Objektnamen damit umgehen (Access ist hier überhaupt nicht beteiligt). –

Verwandte Themen