Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Code Generator für die AddNew Methode

Geschrieben von: Christian Holm
Kategorie: Datenbank

This printed page brought to you by AlphaSierraPapa

Datensätze mit der AddNew Methode einer Datenbank hinzufügen ist ja prinzipiell nicht schwer. Wenn die Datenbank aber viele Spalten hat ist der Schreibaufwand aber groß. Auf jeden Fall so groß, daß es um einiges bequemer ist, den hierfür benötigen Code aus einem ASP-Script generieren zu lassen.

Diesen Task erledigt nun in Zukunft das Beispiel, daß ich für den heutigen Artikel vorbereitet habe. Um den ASP-Code für das Hinzufügen der Datensätze generieren zu können, müssen lediglich zwei Parameter dem Script übergeben werden - der Connection String und ein SQL Abfrage Statement. Nach dem Postback auf den Web Server wird nach der erfolgreichen Verbindung zur Datenbank auch schon der Code generiert. Diesen können Sie dann einfach mittels Copy/Paste in Ihre bestehende ASP Seite einfügen.

Das Beispiel Script (Generator.asp) funktioniert natürlich für eine beliebige Anzahl von Spalten. Das Script geht davon aus, daß die erste Spalte ein Primärschlüssel ist und somit der Spaltenwert automatisch erhöht wird. Ich habe das Script mit der "vielseitig" einsetzbaren Northwind Datenbank getestet, wobei diese auf einem Microsoft SQL Server 2000 liegt.

Das Beispiel-Script beginnt mit dem Einlesen der Übergabewerte, welche zugleich durch die Trim Function von den Leerzeichen am Anfang und Ende befreit werden:

<%
Dim bIsPostback,strConn,strSQLStmt

strConn = Trim(Request.Form("txtConn"))
strSQLStmt = Trim(Request.Form("txtSQLStmt"))

bIsPostback = CLng(Request.ServerVariables("CONTENT_LENGTH"))
%>

Danach folgt das Eingabeformular, in welchem der Connection String (strConn) und das SQL Abfrage Statement (strSQLStmt) eingetragen werden müssen:

<form method="post" action="<%=Request.ServerVariables("SCRIPT_NAME")%>">
<table cellpadding="2" cellspacing="2" border="0">
  <tr>
     <td>Connection string:</td>
     <td>  
        <input type="text" name="txtConn" value="<%=strConn%>" size="90">
     </td>
  </tr>
   <tr>
     <td>SQL Statement:</td>
     <td>  
        <input type="text" name="txtSQLStmt" value="<%=strSQLStmt%>"size="90">
     </td>
  </tr>
  <tr>
      <td colspan="2" align="right"><input type="submit" value="Generate"></td>
  </tr>
</table>
</form>

Der nächste Codeblock schickt die eingegebenen Daten durch die GenerateCode Function, die den Sourcecode für die AddNew Methode erstellt. Das Ergebnis wird der Einfachheit halber in einer Textarea eingebettet:

<%
Dim strOutputCode
If bIsPostback Then
    strOutputCode = GenerateCode(strConn,strSQLStmt)
    strOutputCode = Server.HtmlEncode(strOutputCode)
    
    Response.Write "Generierter Code:<br>"
    Response.Write "<textarea cols=90 rows=25>"
    Response.Write strOutputCode
    Response.Write "</textarea>"
End If
%>

Nun wird es interessant. Der nächste Abschnitt repräsentiert das Kernstück des ASP-Scripts: den eigentlichen Code Generator:

<script language="vbscript" runat="server">

Function GenerateCode(ByVal strConn, ByVal strSQLStmt)
    
    Dim FieldIndex,strFieldNames,strOutput,objConn,objRS
    Set objConn = Server.CreateObject("ADODB.Connection")
    Set objRS = Server.CreateObject("ADODB.Recordset")
    objConn.Open strConn
    objRS.Open strSQLStmt,strConn

Im ersten Teil der GenerateCode Function werden zunächst die Parameter aus dem Formular mit ByVal der Function übergeben. Hier erstellen wir auch die beiden Objekte objConn und objRS, die für die Datenbankabfrage nötig sind. Als nächstes können wir den sich nicht ändernden Teil des Codes generieren:

strOutput  = strOutput & "Set objConn = Server.CreateObject(""ADODB.Connection"")" & vbCrlf
strOutput = strOutput & "Set objRS = Server.CreateObject(""ADODB.Recordset"")" & vbCrlf
strOutput  = strOutput & "strSQLStmt = """ & strSQLStmt & """" & vbCrlf
strOutput  = strOutput & "strConn = """ & strConn & """" & vbCrlf
strOutput  = strOutput & "objConn.Open strConn" & vbCrlf
strOutput  = strOutput & "objRS.CursorLocation = adUseServer" & vbCrlf
strOutput  = strOutput & "objRS.CursorType = adOpenKeyset" & vbCrlf
strOutput  = strOutput & "objRS.LockType = adLockOptimistic" & vbCrlf
strOutput  = strOutput & "objRS.Open strSQLStmt, strConn" & vbCrlf
strOutput = strOutput & "objRS.AddNew" & vbCrlf

Nun müssen wir die Spalten bzw. Felder der Datenbank auslesen und diese in einen wiederverwertbaren Code packen. Hierfür habe ich eine For-Next Schleife verwendet. Die Werte der adUseServer, adOpenKeyset und der LockType Konstanten werden aus der adovbs.inc Datei bezogen. Diese Datei wird später im neuen Script mithilfe von #include file=... eingebunden (kann auf METADATA umgestellt werden). Die erwähnten Konstanten sind notwendig, um einen neuen Datensatz hinzufügen zu können.

For FieldIndex = 1 To objRS.Fields.Count - 1
    strFieldNames = "   objRS.Fields(""" & objRS.Fields(FieldIndex).Name & """).Value"
    strFieldNames = "= !INSERT VALUE HERE! "& vbCrlf      
    strOutput = strOutput & strFieldNames
Next

Ich habe den FieldIndex bei der For-Next Schleife absichtlich bei 1 beginnen lassen, da ich wie vorher schon erwähnt, davon ausgegangen bin, daß die erste Spalte ein Primärschlüssel ist. Somit wird dieses Feld automatisch beim Hinzufügen der Daten befüllt bzw. erhöht. Korrekt wäre mit ADO-X diese Autowertspalte zu ermitteln - aber ein bischen Basteln sei dem Leser überlassen!

Abschließend müssen noch die Veränderungen an der Datenbank (der hinzugefügte Datensatz) mit der Update Methode akzeptiert werden und das Recordset Objekt geschlossen werden:

strOutput = strOutput & "objRS.Update" & vbCrlf
strOutput = strOutput & "objRS.Close" & vbCrlf
GenerateCode = strOutput

Wenn Sie nun die Generator.asp Datei auf einem Web Server ablaufen lassen, auf dem ein Datenbank Server installiert ist, auf dem die Northwind Datenbank liegt, so erhalten Sie folgendes Ergebnis:

Um den generierten Code auch verwenden zu können ist noch folgendes zu tun: Kopieren Sie den Code in eine ASP Seite und referenzieren Sie auf die adovbs.inc Datei. Das einzige was Sie noch tun müssen, ist die eigentlichen Daten angeben. Im einfachsten Fall sieht die von Ihnen zu erstellende bzw. vorhandene ASP Datei so aus (Ähnlichkeiten mit bestehenden Firmen bzw. Personen sind unbeabsichtigt und rein zufällig):


<%
Set objConn = Server.CreateObject("ADODB.Connection")
Set objRS = Server.CreateObject("ADODB.Recordset")
strSQLStmt = "SELECT * FROM Suppliers WHERE -1=0"
strConn = "Provider=SQLOLEDB;server=localhost;uid=sa;pwd=;Initial Catalog=Northwind;"
objConn.Open strConn
objRS.CursorLocation = adUseServer
objRS.CursorType = adOpenKeyset
objRS.LockType = adLockOptimistic
objRS.Open strSQLStmt, strConn
objRS.AddNew
   objRS.Fields("CompanyName").Value = "Inferis Corp."
   objRS.Fields("ContactName").Value = "Jon Doe"
   objRS.Fields("ContactTitle").Value = "Marketing Manager"
   objRS.Fields("Address").Value = "34 Rune Bvld."
   objRS.Fields("City").Value =  "Los Angeles"
   objRS.Fields("Region").Value = "CA"
   objRS.Fields("PostalCode").Value = "92555"
   objRS.Fields("Country").Value = "USA"
   objRS.Fields("Phone").Value = "(202) 555-1234"
   objRS.Fields("Fax").Value =  "(202) 555-1234-55"
   objRS.Fields("HomePage").Value = "inferisultima.com" 
objRS.Update
objRS.Close
%>

Ich habe diesen einfachsten Fall unter dem Namen TestDrive.asp gespeichert. Wenn Sie diese Datei auf einem Web Server ausführen, wird der Northwind Datenbank ein Datensatz mit diesen Beispieldaten hinzugefügt.

Und wirklich, wenn wir einen Blick auf die Suppliers Tabelle im SQL Server Enterprise Manager werfen findet sich der Datensatz an der erwarteten letzten Stelle:

Schlußbemerkung

Dies war ein einfaches aber praktisches Beispiel um sich die Arbeit bei umfangreichen Datenbanken zu ersparen, indem man sich einfach den Code mit Hilfe eines ASP-Scriptes generieren läßt. Mit ein paar kleinen Anpassungen können Sie natürlich auch mehrere Datensätze hinzufügen lassen.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010327.zip

Verwandte Artikel

Auto-Generierung von performantem Abfragecode
http:/www.aspheute.com/artikel/20010329.htm
Der ADO Command Code Generator
http:/www.aspheute.com/artikel/20010308.htm
Records zählen mit Stored Procedures
http:/www.aspheute.com/artikel/20010326.htm
Stored Procedures einfach erstellt
http:/www.aspheute.com/artikel/20020903.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.