Freigeben über


Verbinden eines Elements im Datenspeicher mit einer SQL Server-Datenbank

Mit Word können Sie Dokumente durch Erstellen von datengesteuerten Lösungen generieren. Sie können ein Vorlagendokument mit einer benutzerdefinierten XML-Komponente erstellen und Inhaltssteuerelemente verwenden, um mithilfe der XML-Zuordnung eine Bindung an benutzerdefinierte XML-Daten zu erstellen. Obwohl der Begriff Vorlage in diesem Kontext verwendet wird, ist dieses Dokument keine Word-Vorlage, sondern weist einige Merkmale eines Word-Vorlagendokuments auf. Sie können dann eine verwaltete webbasierte Anwendung zum Erstellen eines neuen Dokuments auf Grundlage des Vorlagendokuments erstellen. Die verwaltete webbasierte Anwendung öffnet das Vorlagendokument, ruft Daten aus einer Microsoft SQL Server-Datenbank ab, um eine neue benutzerdefinierte XML-Komponente zu erstellen, ersetzt die benutzerdefinierte XML-Komponente des Vorlagendokuments mit der neuen Komponente und speichert das Vorlagendokument als ein neues Word-Dokument.

In dieser exemplarischen Vorgehensweise wird erläutert, wie Sie ein neues Vorlagendokument erstellen und wie Sie eine serverseitige Anwendung erstellen, die Dokumente generiert, die in einer Microsoft SQL Server-Datenbank gespeicherte Daten anzeigt. Zum Erstellen dieser Anwendung führen Sie die folgenden beiden Aufgaben aus:

  1. Erstellen eines Word-Vorlagendokuments

  2. Erstellen einer serverseitigen webbasierten Anwendung, die Daten aus einer Microsoft SQL Server-Datenbank abruft und neue Dokumente basierend auf dem Word-Vorlagendokument generiert

Folgende programmgesteuerte Objekte werden in diesem Beispiel verwendet:

Weitere Informationen zu Inhaltssteuerelementen finden Sie unter Arbeiten mit Inhaltssteuerelementen.

Geschäftsszenario: Erstellen eines Kundendokument-Generators

Zum Erstellen eines Word-Dokument-Generator, der ein Element im Datenspeicher mit einer Microsoft SQL Server-Datenbank verbindet, erstellen Sie zunächst eine Vorlage für ein Kundenbrief-Generator-Dokument, das Inhaltssteuerelemente enthält, die einer XML-Datei zugeordnet sind. Als Nächstes erstellen Sie eine webbasierte Anwendung für die Dokumentgenerierung, mit der Sie einen Firmennamen zum Generieren eines benutzerdefinierten Dokuments auswählen können. Die Anwendung ruft Kundendaten aus einer Microsoft SQL Server-Datenbank ab und verwendet den Kundenbrief-Generator, um ein neues Dokument zu erstellen, in dem Kundendaten anhand der Auswahl des Benutzers angezeigt werden. Das Dokument zeigt die folgenden Informationen an:

  • Firmenname
  • Name der Kontaktperson
  • Titel der Kontaktperson
  • Telefonnummer

Verwenden Sie die folgenden allgemeinen Schritte, um einen Word-Dokument-Generator zu erstellen.

So erstellen Sie einen benutzerdefinierten Dokument-Generator und definieren die XML-Zuordnungen für jedes Inhaltssteuerelement

  1. Öffnen Sie Word, und erstellen Sie ein leeres Dokument.

  2. Fügen Sie Nur-Text-Inhaltssteuerelemente zum Dokument hinzu, um eine Bindung zu Knoten im Datenspeicher herzustellen.

    Inhaltssteuerelemente sind vordefinierte Inhaltsblöcke. Word bietet verschiedene Arten von Inhaltssteuerelementen. Dazu zählen Textblöcke, Kontrollkästchen, Dropdownmenüs, Kombinationsfelder, Kalendersteuerelemente und Bilder. Sie können diese Inhaltssteuerelemente zu einem Element in einer XML-Datei zuordnen. Mithilfe von XPath-Ausdrücken können Sie Inhalte in einer XML-Datei programmgesteuert einem Inhaltssteuerelement zuordnen. Dies ermöglicht Ihnen, eine einfache und kurze Anwendung zu schreiben, um Daten in einem Dokument zu bearbeiten und zu ändern.

    Klicken Sie zum Hinzufügen eines Inhaltssteuerelements auf die Registerkarte Entwickler, und klicken Sie in der Gruppe Steuerelemente auf Nur-Text-Inhaltssteuerelement.

    Fügen Sie dem Dokument vier Nur-Text-Inhaltssteuerelemente hinzu. Nachdem Sie jedes Steuerelement hinzugefügt haben, weisen Sie jedem einen Titel zu: Klicken Sie auf das Steuerelement; klicken Sie in der Gruppe Steuerelemente auf Eigenschaften; Geben Sie im Feld Titel einen Titel für das Steuerelement ein, wie in der folgenden Liste gezeigt. und klicken Sie dann auf OK.

    • Firmenname
    • Name der Kontaktperson
    • Titel der Kontaktperson
    • Telefonnummer

    Sie können außerdem den folgenden Visual Basic for Applications (VBA)-Code verwenden, um dem Dokument Inhaltssteuerelemente hinzuzufügen. Drücken Sie ALT+F11, um den Visual Basic-Editor zu öffnen, fügen Sie den Code in das Codefenster ein, klicken Sie auf eine beliebige Stelle in der Prozedur, und drücken Sie dann F5, um den Code auszuführen und vier Inhaltssteuerelemente zu Ihrem Vorlagendokument hinzuzufügen.

         Sub AddContentControls()
    
             Selection.Range.ContentControls.Add (wdContentControlText)
             Selection.ParentContentControl.Title = "Company Name"
             Selection.ParentContentControl.Tag = "Company Name"
             Selection.MoveDown Unit:=wdLine, Count:=1
             Selection.TypeParagraph
    
             Selection.Range.ContentControls.Add (wdContentControlText)
             Selection.ParentContentControl.Title = "Contact Name"
             Selection.ParentContentControl.Tag = "Contact Name"
             Selection.MoveDown Unit:=wdLine, Count:=1
             Selection.TypeParagraph
    
             Selection.Range.ContentControls.Add (wdContentControlText)
             Selection.ParentContentControl.Title = "Contact Title"
             Selection.ParentContentControl.Tag = "Contact Title"
             Selection.MoveDown Unit:=wdLine, Count:=1
             Selection.TypeParagraph
    
             Selection.Range.ContentControls.Add (wdContentControlText)
             Selection.ParentContentControl.Title = "Phone Number"
             Selection.ParentContentControl.Tag = "Phone Number"
             Selection.MoveDown Unit:=wdLine, Count:=1
             Selection.TypeParagraph
    
         End Sub
    
  3. Legen Sie die XML-Zuordnung für die Inhaltssteuerelemente fest.

    Die XML-Zuordnung ist eine Funktion von Word, mit der Sie eine Verknüpfung zwischen einem Dokument und einer XML-Datei erstellen können. Dadurch wird eine echte Daten-/Ansichtstrennung zwischen der Dokumentformatierung und den benutzerdefinierten XML-Daten erstellt.

    Um eine benutzerdefinierte XML-Komponente zu laden, müssen Sie zunächst einen neuen Datenspeicher zu einem Document-Objekt hinzufügen, indem Sie die Add-Methode der CustomXMLParts-Auflistung verwenden. Damit wird dem Dokument ein neuer, leerer Datenspeicher angefügt. Da er leer ist, können nicht Sie ihn noch nicht verwenden. Als Nächstes müssen Sie eine benutzerdefinierte XML-Komponente aus einer XML-Datei in den Datenspeicher laden, indem Sie die Methode Load des Objekts CustomXMLPart aufrufen, die einen gültigen Pfad zu einer XML-Datei als Parameter verwendet.

  4. Speichern Sie das Dokument, und nennen Sie es CustomerLetterGenerator.docm.

    Hinweis

    Da es VBA-Code enthält, müssen Sie das Dokument als Makro-fähige Dokumentdatei (.docm)|

Im folgenden Verfahren wird erläutert, wie Sie ein Inhaltssteuerelement zu einer benutzerdefinierten XML-Beispieldatei zuordnen. Sie erstellen eine gültige benutzerdefinierte XML-Datei, speichern die Datei, und verwenden dann Visual Basic for Applications (VBA)-Code, um dem Vorlagendokument einen Datenspeicher hinzuzufügen, der die Informationen enthält, die Sie zuordnen möchten.

So legen Sie eine XML-Zuordnung für ein Inhaltssteuerelement fest

  1. Erstellen Sie eine Textdatei, und speichern Sie sie als CustomerData.xml.

  2. Kopieren Sie den folgenden XML-Code in die Textdatei, und speichern Sie die Datei.

         <?xml version="1.0"?> 
         <Customer> 
         <CompanyName>Alfreds Futterkiste</CompanyName> 
         <ContactName>Maria Anders</ContactName> 
         <ContactTitle>Sales Representative</ContactTitle> 
         <Phone>030-0074321</Phone> 
         </Customer> 
    
  3. Drücken Sie ALT+F11, um den Visual Basic-Editor zu öffnen, fügen Sie den folgenden Code in das Codefenster ein, klicken Sie auf eine beliebige Stelle in der Prozedur, und drücken Sie dann F5, um den Code auszuführen und eine XML-Datei an Ihr Vorlagendokument anzufügen, damit es ein verfügbares Datenspeicherelement wird.

         Public Sub LoadXML()
    
         ' Load CustomerData.xml file
         ActiveDocument.CustomXMLParts.Add
         ActiveDocument.CustomXMLParts(ActiveDocument.CustomXMLParts.Count).Load ("C:\CustomerData.xml")
         End Sub
    

    Hinweis

    Es gibt mindestens drei benutzerdefinierte XML-Standardteile, die immer mit einem Dokument erstellt werden: "Deckblätter", "Doc-Eigenschaften" und "App-Eigenschaften". Darüber hinaus können verschiedene andere benutzerdefinierte XML-Komponenten auf einem bestimmten Computer erstellt werden, abhängig von verschiedenen Faktoren, z. B., welche Add-ons installiert sind, Verbindungen mit SharePoint und so weiter. Durch Aufrufen der Add-Methode für die CustomXMLParts-Auflistung im vorherigen Code wird ein zusätzlicher XML-Teil hinzugefügt, in den die XML-Datei geladen wird. In diesem Teil wird die Load-Methode in der nächsten Codezeile aufgerufen.

    Um die Indexnummer der Komponente zu bestimmen, in die die XML-Datei geladen wird, muss die Anzahl der benutzerdefinierten XML-Komponenten an die Methode Load übergeben werden. ActiveDocument.CustomXMLParts(ActiveDocument.CustomXMLParts.Count).Load ("C:\CustomerData.xml")

  4. Legen Sie eine XML-Zuordnung für ein Inhaltssteuerelement fest, die auf einen Knoten im hinzugefügten Datenspeicher verweist.

    Um eine XML-Zuordnung zu erstellen, verwenden Sie einen XPath-Ausdruck, der auf den Knoten in der benutzerdefinierten XML-Datenkomponente verweist, der Sie ein Inhaltssteuerelement zuordnen möchten. Nach dem Hinzufügen eines Datenspeichers zu Ihrem Dokument (und der Datenspeicher verweist auf eine gültige XML-Datei) können Sie einen der Knoten zu einem Inhaltssteuerelement zuordnen.

    Übergeben Sie zu diesem Zweck eine Zeichenfolge, die einen gültigen XPath enthält, an ein ContentControl-Objekt, indem Sie die Methode SetMapping des Objekts XMLMapping verwenden (mithilfe der Eigenschaft XMLMapping des Objekts ContentControl). Öffnen Sie den Visual Basic-Editor, und führen Sie den folgenden VBA-Code aus, um Inhaltssteuerelemente an Elemente im Datenspeicher zu binden.

         Public Sub MapXML()
    
             Dim strXPath1 As String
             strXPath1 = "/Customer/CompanyName"
             ActiveDocument.ContentControls(1).XMLMapping.SetMapping strXPath1
    
             Dim strXPath2 As String
             strXPath2 = "/Customer/ContactName"
             ActiveDocument.ContentControls(2).XMLMapping.SetMapping strXPath2
    
             Dim strXPath3 As String
             strXPath3 = "/Customer/ContactTitle"
             ActiveDocument.ContentControls(3).XMLMapping.SetMapping strXPath3
    
             Dim strXPath4 As String
             strXPath4 = "/Customer/Phone"
             ActiveDocument.ContentControls(4).XMLMapping.SetMapping strXPath4
    
    

Erstellen einer serverseitigen Anwendung, die Daten aus einer SQL Server-Datenbank abruft und ein neues Dokument generiert

Sie können eine webbasierte Anwendung erstellen, mit der Benutzer einen Firmennamen auswählen und einen benutzerdefinierten Brief generieren können. Die webbasierte Anwendung ruft Kundendaten aus einer SQL Server-Datenbank ab, öffnet das Vorlagendokument für den Kundenbrief und erstellt ein neues Dokument, in dem Kundendaten basierend auf der Auswahl des Benutzers angezeigt werden. Für diese webbasierte Anwendung ist nicht die Verwendung von Word oder VBA erforderlich. Verwenden Sie Ihre bevorzugte Sprache für verwalteten Code (Visual Basic .NET oder C#), um diese Anwendung zu erstellen.

Hinweis

Die hier gezeigte webbasierte Anwendung ruft Daten aus der Datenbank Northwind.mdf ab. Diese Datenbank wurde mit früheren Versionen von SQL Server und Office installiert. Wenn Sie die Northwind-Datenbank nicht auf Ihrem Computer haben, können Sie sie von der folgenden Website herunterladen: Northwind-Datenbank

So erstellen Sie eine serverseitige Anwendung, die Daten aus einer SQL Server-Datenbank abruft und ein neues Dokument generiert

  1. Öffnen Sie Visual Studio oder Visual Web Developer.

  2. Erstellen eine ASP.NET-Webanwendung, und nennen Sie sie SqlServerSample .

    In den folgenden Schritten verbinden Sie die ASP.NET-Webanwendung mit einer SQL Server-Datenbank.

  3. Fügen Sie die folgende Verbindungszeichenfolge zur Datei „Web.config“ in Ihrem Visual Studio-Projekt hinzu.

         <connectionStrings>
         <add name="NorthwindConnectionString"
             connectionString="data source=(local);database=Northwind; integrated security=SSPI;persist security info=false;"
             providerName="System.Data.SqlClient" />
         </connectionStrings>
    
  4. Fügen Sie in Ihrem Visual Studio-Projekt das Dokument „CustomerLetterGenerator.docm“ zum Ordner App_Data hinzu: Klicken Sie mit der rechten Maustaste auf App_Data, zeigen Sie auf Hinzufügen, klicken Sie auf Vorhandnes Element, navigieren Sie zu dem Speicherort, an dem Sie das Dokument gespeichert haben, wählen Sie es aus, und klicken Sie dann auf Hinzufügen.

  5. Fügen Sie einen Verweis auf „WindowsBase.dll“ zu Ihrem Projekt hinzu: Klicken Sie mit der rechten Maustaste auf Verweise, klicken Sie auf Verweis hinzufügen, klicken Sie auf die Registerkarte .NET, wählen Sie WindowsBase aus, und klicken Sie dann auf OK.

  6. Herunterladen und Installieren von Microsoft .NET Framework 4.0

  7. Konfigurieren Sie die Assembly in der Datei „Web.config“ wie folgt.

         <compilation debug="false">
         <assemblies>
             <add assembly="WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
         </assemblies>
         </compilation>
    
  8. Fügen Sie Ihrem Projekt ein Webformular hinzu: Klicken Sie im Menü Projekt auf Neues Element hinzufügen. Klicken Sie unter Installierte Vorlagen auf Web, wählen Sie Webformular aus, und klicken Sie dann auf Hinzufügen.

  9. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Eigenschaften, und klicken Sie dann auf Öffnen.

  10. Wählen Sie auf der Registerkarte Web unter Startaktion die Option Bestimmte Seite aus, klicken Sie auf die Schaltfläche zum Durchsuchen, und navigieren Sie zur Seite WebForm1.aspx.

  11. Fügen Sie der Datei WebForm1.aspx den folgenden Code hinzu, und überschreiben Sie dabei den Teil der Datei, der durch die öffnenden und schließenden <html> Tags begrenzt ist.

        <html xmlns="https://www.w3.org/1999/xhtml">
        <head runat="server">
            <title>Data-Driven Document Generation - SQL Server Sample</title>
        </head>
        <body>
            <form id="form1" runat="server">
            <div>
            <h1>Customer Letter Generator</h1>
                    <table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 12%">
                        <tr>
                            <td>
                                Choose a customer:</td>
                            <td>
                                <asp:DropDownList 
                                ID="ddlCustomer"
                                runat="server"
                                AutoPostBack="True"
                                DataSourceID="CustomerData"
                                DataTextField="CompanyName"
                                DataValueField="CustomerID" 
                                Width="301px">
                                </asp:DropDownList>
                                <asp:SqlDataSource
                                ID="CustomerData"
                                runat="server"
                                ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
                                SelectCommand="SELECT [CustomerID], [CompanyName] FROM [Customers]" ProviderName="<%$ ConnectionStrings:NorthwindConnectionString.ProviderName %>">
                                </asp:SqlDataSource>
                            </td>
                        </tr>
                </table>
                </div>
                <br />
                <asp:Button
                ID="Button1"
                runat="server"
                OnClick="SubmitBtn_Click" 
                Text="Create Letter"
                Width="123px" />    
            </form>
        </body>
        </html>
    
    
  12. Fügen Sie je nach verwendeter Codierungssprache den folgenden Visual Basic .NET- oder C#-Code zur entsprechenden WebForm1.aspx-CodeBehind-Seite in Ihrem Projekt hinzu.

Beispielcode: Visual Basic .NET

Im folgenden Beispiel für Visual Basic .NET wird gezeigt, wie Sie die Bindung mit einer SQL Server-Datenbank herstellen, um Daten basierend auf der Kundenauswahl abzurufen und ein neues Dokument basierend auf dem Vorlagendokument „CustomerLetterGenerator.docm“ zu erstellen. Fügen Sie den folgenden Code zur Datei WebForm1.aspx.vb hinzu, und überschreiben Sie dabei den vorhandenen Code in der Datei.

Imports System.Collections.Generic
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Imports System.IO.Packaging
Imports System.Linq
Imports System.Xml
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls

Public Class WebForm1

    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

    Private Const strRelRoot As String = "https://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"

    Private Sub CreateDocument()
        ' Get the template document file and create a stream from it
        Const DocumentFile As String = "~/App_Data/CustomerLetterGenerator.docm"

        ' Read the file into memory
        Dim buffer() As Byte = File.ReadAllBytes(Server.MapPath(DocumentFile))
        Dim memoryStream As MemoryStream = New MemoryStream(buffer, True)
        buffer = Nothing

        ' Open the document in the stream and replace the custom XML part
        Dim pkgFile As Package = Package.Open(memoryStream, FileMode.Open, FileAccess.ReadWrite)
        Dim pkgrcOfficeDocument As PackageRelationshipCollection = pkgFile.GetRelationshipsByType(strRelRoot)
        For Each pkgr As PackageRelationship In pkgrcOfficeDocument
            If (pkgr.SourceUri.OriginalString = "/") Then

                ' Get the root part
                Dim pkgpRoot As PackagePart = pkgFile.GetPart(New Uri(("/" + pkgr.TargetUri.ToString), UriKind.Relative))

                ' Add a custom XML part to the package
                Dim uriData As Uri = New Uri("/customXML/item1.xml", UriKind.Relative)
                If pkgFile.PartExists(uriData) Then

                    ' Delete part "/customXML/item1.xml" part
                    pkgFile.DeletePart(uriData)
                End If

                ' Load the custom XML data
                Dim pkgprtData As PackagePart = pkgFile.CreatePart(uriData, "application/xml")
                GetDataFromSQLServer(pkgprtData.GetStream, ddlCustomer.SelectedValue)
            End If
        Next

        ' Close the file
        pkgFile.Close()

        ' Return the result
        Response.ClearContent()
        Response.ClearHeaders()
        Response.AddHeader("content-disposition", "attachment; filename=document.docx")
        Response.ContentEncoding = System.Text.Encoding.UTF8
        memoryStream.WriteTo(Response.OutputStream)
        memoryStream.Close()
        Response.End()
    End Sub

    Private Sub GetDataFromSQLServer(ByVal stream As Stream, ByVal customerID As String)

        'Connect to a SQL Server database and get data
        Dim source As String = ConfigurationManager.ConnectionStrings("NorthwindConnectionString").ConnectionString
        Const SqlStatement As String = "SELECT CompanyName, ContactName, ContactTitle, Phone FROM Customers WHERE CustomerID=@customerID"
        Dim conn As SqlConnection = New SqlConnection(source)
        conn.Open()
        Dim cmd As SqlCommand = New SqlCommand(SqlStatement, conn)
        cmd.Parameters.AddWithValue("@customerID", customerID)
        Dim dr As SqlDataReader = cmd.ExecuteReader
        If dr.Read Then
            Dim writer As XmlWriter = XmlWriter.Create(stream)
            writer.WriteStartElement("Customer")
            writer.WriteElementString("CompanyName", CType(dr("CompanyName"), String))
            writer.WriteElementString("ContactName", CType(dr("ContactName"), String))
            writer.WriteElementString("ContactTitle", CType(dr("ContactTitle"), String))
            writer.WriteElementString("Phone", CType(dr("Phone"), String))
            writer.WriteEndElement()
            writer.Close()
        End If
        dr.Close()
        conn.Close()
    End Sub

    Protected Sub SubmitBtn_Click(ByVal sender As Object, ByVal e As EventArgs)
        CreateDocument()
    End Sub

End Class

Beispielcode: C#

Im folgenden C#-Beispiel wird gezeigt, wie Sie die Bindung mit einer SQL Server-Datenbank herstellen, um Daten basierend auf der Kundenauswahl abzurufen und ein neues Dokument basierend auf dem Vorlagendokument „CustomerLetterGenerator.docm“ zu erstellen. Fügen Sie den folgenden Code zur Datei WebForm1.Aspx.cs hinzu, indem Sie ihn über den vorhandenen Code kopieren.

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.IO.Packaging;
using System.Linq;
using System.Xml;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SQLServerSample
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        private const string strRelRoot = "https://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";

        private void CreateDocument()
        {
            // Get the template document file and create a stream from it
            const string DocumentFile = @"~/App_Data/CustomerLetterGenerator.docm";
            
            // Read the file into memory
            byte[] buffer = File.ReadAllBytes(Server.MapPath(DocumentFile));
            MemoryStream memoryStream = new MemoryStream(buffer, true);
            buffer = null;

            // Open the document in the stream and replace the custom XML part
            Package pkgFile = Package.Open(memoryStream, FileMode.Open, FileAccess.ReadWrite);
            PackageRelationshipCollection pkgrcOfficeDocument = pkgFile.GetRelationshipsByType(strRelRoot);
            foreach (PackageRelationship pkgr in pkgrcOfficeDocument)
            {
                if (pkgr.SourceUri.OriginalString == "/")
                {
                    // Get the root part
                    PackagePart pkgpRoot = pkgFile.GetPart(new Uri("/" + pkgr.TargetUri.ToString(), UriKind.Relative));

                    // Add a custom XML part to the package
                    Uri uriData = new Uri("/customXML/item1.xml", UriKind.Relative);

                    if (pkgFile.PartExists(uriData))
                    {
                        // Delete document "/customXML/item1.xml" part
                        pkgFile.DeletePart(uriData);
                    }
                    // Load the custom XML data
                    PackagePart pkgprtData = pkgFile.CreatePart(uriData, "application/xml");
                    GetDataFromSQLServer(pkgprtData.GetStream(), ddlCustomer.SelectedValue);
                }
            }

            // Close the file
            pkgFile.Close();

            // Return the result
            Response.ClearContent();
            Response.ClearHeaders();
            Response.AddHeader("content-disposition", "attachment; filename=CustomLetter.docx");
            Response.ContentEncoding = System.Text.Encoding.UTF8;

            memoryStream.WriteTo(Response.OutputStream);

            memoryStream.Close();

            Response.End();
        }

        private void GetDataFromSQLServer(Stream stream, string customerID)
        {
            // Connect to a SQL Server database and get data
            String source = System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;            
            const string SqlStatement =
                "SELECT CompanyName, ContactName, ContactTitle, Phone FROM Customers WHERE CustomerID=@customerID";

            using (SqlConnection conn = new SqlConnection(source))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(SqlStatement, conn);
                cmd.Parameters.AddWithValue("@customerID", customerID);
                SqlDataReader dr = cmd.ExecuteReader();

                if (dr.Read())
                {
                    XmlWriter writer = XmlWriter.Create(stream);
                    writer.WriteStartElement("Customer");
                    writer.WriteElementString("CompanyName", (string)dr["CompanyName"]);
                    writer.WriteElementString("ContactName", (string)dr["ContactName"]);
                    writer.WriteElementString("ContactTitle", (string)dr["ContactTitle"]);
                    writer.WriteElementString("Phone", (string)dr["Phone"]);
                    writer.WriteEndElement();
                    writer.Close();
                }
                dr.Close();
                conn.Close();
            }
        }

        protected void SubmitBtn_Click(object sender, EventArgs e)
        {
            CreateDocument();
        }
    }
}

Weitere Informationen zum Arbeiten mit ASP.NET 2.0 finden Sie unter https://www.asp.net/get-started/.

In diesem Artikel wird erläutert, wie Sie Daten aus einer SQL Server-Datenbank extrahieren und in Ihr Vorlagendokument einfügen. Sie können die Daten auch aus anderen Datenquellen extrahieren, z. B. Access und Excel. Weitere Informationen zum programmgesteuerten Verbinden mit Daten in diesen Anwendungen finden Sie in der Access und Excel-Entwicklerdokumentation.

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.