SqlDataSource.InsertCommand Eigenschaft

Definition

Ruft die SQL-Zeichenfolge ab, die vom SqlDataSource-Steuerelement zum Einfügen von Daten in die zugrunde liegende Datenbank verwendet wird, oder legt diese Zeichenfolge fest.Gets or sets the SQL string that the SqlDataSource control uses to insert data into the underlying database.

public:
 property System::String ^ InsertCommand { System::String ^ get(); void set(System::String ^ value); };
public string InsertCommand { get; set; }
member this.InsertCommand : string with get, set
Public Property InsertCommand As String

Eigenschaftswert

Eine SQL-Zeichenfolge, die von der SqlDataSource zum Einfügen von Daten verwendet wird.An SQL string that the SqlDataSource uses to insert data.

Beispiele

Dieser Abschnitt enthält zwei Codebeispiele.This section contains two code examples. Im ersten Codebeispiel wird veranschaulicht, wie Daten mithilfe des SqlDataSource -Steuer Elements und einer einfachen Web Forms Seite in eine Datenbank eingefügt werden.The first code example demonstrates how to insert data into a database using the SqlDataSource control and a simple Web Forms page. Im zweiten Codebeispiel wird veranschaulicht, wie Daten aus Microsoft SQL Server abgerufen und in einem GridView -Steuerelement angezeigt werden und wie ein DetailsView -Steuerelement verwendet wird, um die GridView Details einer ausgewählten Zeile im-Steuerelement anzuzeigen und um neue Datensätze einzufügen.The second code example demonstrates how to retrieve data from Microsoft SQL Server and display it in a GridView control and how to use a DetailsView control to see details of a selected row into the GridView control and as a form to insert new records.

Hinweis

In diesen Beispielen wird gezeigt, wie deklarative Syntax für den Datenzugriff verwendet wird.These examples show how to use declarative syntax for data access. Informationen zum Zugreifen auf Daten mithilfe von Code anstelle von Markup finden Sie unter zugreifen auf Daten in Visual Studio.For information about how to access data by using code instead of markup, see Accessing data in Visual Studio.

Im folgenden Codebeispiel wird veranschaulicht, wie Daten mithilfe des SqlDataSource -Steuer Elements und einer einfachen Web Forms Seite in eine Datenbank eingefügt werden.The following code example demonstrates how to insert data into a database using the SqlDataSource control and a simple Web Forms page. Die aktuellen Daten in der Datentabelle werden im DropDownList -Steuerelement angezeigt.The current data in the Data table is displayed in the DropDownList control. Sie können neue Datensätze hinzufügen, indem Sie TextBox Werte in die Steuerelemente eingeben und dann auf die Schaltfläche Einfügen klicken.You can add new records by entering values into the TextBox controls, and then clicking the Insert button. Wenn auf die Schaltfläche Einfügen geklickt wird, werden die angegebenen Werte in die Datenbank eingefügt, DropDownList und das Steuerelement wird aktualisiert.When the Insert button is clicked, the specified values are inserted into the database, and the DropDownList control is refreshed.

Wichtig

Dieses Beispiel enthält ein Textfeld, das Benutzereingaben akzeptiert. Dies ist eine potenzielle Sicherheitsbedrohung, und Werte werden ohne Validierung in Parameter eingefügt, was auch eine potenzielle Sicherheitsbedrohung darstellt.This example includes a text box that accepts user input, which is a potential security threat, and values are inserted into parameters without validation, which is also a potential security threat. Verwenden Sie Inserting das-Ereignis, um Parameterwerte vor dem Ausführen der Abfrage zu überprüfen.Use the Inserting event to validate parameter values before executing the query. Weitere Informationen finden Sie unter Übersicht über Skriptangriffe.For more information, see Script Exploits Overview.

<%@Page  Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
private void InsertShipper (object source, EventArgs e) {
  SqlDataSource1.Insert();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">

      <asp:dropdownlist
        id="DropDownList1"
        runat="server"
        datasourceid="SqlDataSource1"
        datatextfield="CompanyName"
        datavaluefield="ShipperID" />

<!-- Security Note: The SqlDataSource uses a FormParameter,
     Security Note: which does not perform validation of input from the client.
     Security Note: To validate the value of the FormParameter, handle the Inserting event. -->

      <asp:sqldatasource
        id="SqlDataSource1"
        runat="server"
        connectionstring="<%$ ConnectionStrings:MyNorthwind %>"
        selectcommand="SELECT CompanyName,ShipperID FROM Shippers"
        insertcommand="INSERT INTO Shippers (CompanyName,Phone) VALUES (@CoName,@Phone)">
          <insertparameters>
            <asp:formparameter name="CoName" formfield="CompanyNameBox" />
            <asp:formparameter name="Phone"  formfield="PhoneBox" />
          </insertparameters>
      </asp:sqldatasource>

      <br /><asp:textbox
           id="CompanyNameBox"
           runat="server" />

      <asp:RequiredFieldValidator
        id="RequiredFieldValidator1"
        runat="server"
        ControlToValidate="CompanyNameBox"
        Display="Static"
        ErrorMessage="Please enter a company name." />

      <br /><asp:textbox
           id="PhoneBox"
           runat="server" />

      <asp:RequiredFieldValidator
        id="RequiredFieldValidator2"
        runat="server"
        ControlToValidate="PhoneBox"
        Display="Static"
        ErrorMessage="Please enter a phone number." />

      <br /><asp:button
           id="Button1"
           runat="server"
           text="Insert New Shipper"
           onclick="InsertShipper" />

    </form>
  </body>
</html>
<%@Page  Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
Private Sub InsertShipper (ByVal Source As Object, ByVal e As EventArgs)
  SqlDataSource1.Insert()
End Sub ' InsertShipper
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">

      <asp:dropdownlist
        id="DropDownList1"
        runat="server"
        datasourceid="SqlDataSource1"
        datatextfield="CompanyName"
        datavaluefield="ShipperID" />

<!-- Security Note: The SqlDataSource uses a FormParameter,
     Security Note: which does not perform validation of input from the client.
     Security Note: To validate the value of the FormParameter, handle the Inserting event. -->

      <asp:sqldatasource
        id="SqlDataSource1"
        runat="server"
        connectionstring="<%$ ConnectionStrings:MyNorthwind %>"
        selectcommand="SELECT CompanyName,ShipperID FROM Shippers"
        insertcommand="INSERT INTO Shippers (CompanyName,Phone) VALUES (@CoName,@Phone)">
          <insertparameters>
            <asp:formparameter name="CoName" formfield="CompanyNameBox" />
            <asp:formparameter name="Phone"  formfield="PhoneBox" />
          </insertparameters>
      </asp:sqldatasource>

      <br /><asp:textbox
           id="CompanyNameBox"
           runat="server" />

      <asp:RequiredFieldValidator
        id="RequiredFieldValidator1"
        runat="server"
        ControlToValidate="CompanyNameBox"
        Display="Static"
        ErrorMessage="Please enter a company name." />

      <br /><asp:textbox
           id="PhoneBox"
           runat="server" />

      <asp:RequiredFieldValidator
        id="RequiredFieldValidator2"
        runat="server"
        ControlToValidate="PhoneBox"
        Display="Static"
        ErrorMessage="Please enter a phone number." />

      <br /><asp:button
           id="Button1"
           runat="server"
           text="Insert New Shipper"
           onclick="InsertShipper" />

    </form>
  </body>
</html>

Im folgenden Codebeispiel wird veranschaulicht, wie Daten aus SQL Server abgerufen und in einem GridView -Steuerelement angezeigt werden. Außerdem wird veranschaulicht, wie ein DetailsView -Steuerelement verwendet wird GridView , um die Details einer ausgewählten Zeile im-Steuerelement und als Formular zum Einfügen neuer Datensätze anzuzeigen.The following code example demonstrates how to retrieve data from SQL Server and display it in a GridView control and how to use a DetailsView control to see details of a selected row in the GridView control and as a form to insert new records.

Zunächst werden die Daten im GridView -Steuerelement angezeigt, und die ausgewählte Zeile GridView des DetailsView wird ebenfalls im-Steuerelement angezeigt.Initially, the data is displayed in the GridView control, and the selected row of the GridView is also displayed in the DetailsView control. Das GridView - DetailsView Steuerelement und das-Steuerelement verwenden unterschiedliche Datenquellen GridView -Steuer DetailsView Elemente; das FilterParameters , das dem zugeordnet ist, verfügt über die FilterExpression -und-Eigenschaften, die sicherstellen, dass die ausgewählte gestellte.The GridView and DetailsView controls use different data source controls; the one that is associated with the DetailsView has the FilterExpression and FilterParameters properties, which ensures that the selected row of the GridView is displayed.

Wenn Sie auf die automatisch generierte Schaltfläche Einfügen des DetailsView -Steuer Elements DetailsView klicken, wird eine andere Benutzeroberfläche angezeigt, die zum Einfügen eines neuen Datensatzes verwendet wird.If you click the automatically generated Insert button of the DetailsView control, the DetailsView shows a different user interface, which is used to insert a new record. Im Beispiel wird eine gespeicherte Prozedur verwendet, um Datensätze einzufügen, und gibt den Primärschlüssel der eingefügten Zeile zurück.The example uses a stored procedure to insert records and returns the primary key of the inserted row. Wenn Sie einen Datensatz einfügen, DetailsView füllt InsertParameters die Auflistung automatisch mit Werten aus den gebundenen Spalten auf und ruft die Insert -Methode auf.If you insert a record, the DetailsView automatically populates the InsertParameters collection with values from the bound columns and calls the Insert method. Der DetailsView kann die richtigen Parameter von einem beliebigen BoundField -Objekt und einen Parameter für das TemplateField -Objekt ableiten, wenn die ASP.net-bidirektionale Daten Bindungs Syntax verwendet wird.The DetailsView can infer the correct parameters from any BoundField object and a parameter for the TemplateField object when the ASP.NET two-way data-binding syntax is used. In diesem Beispiel wird ein zusätzlicher Parameter im OnInserting -Ereignishandler hinzugefügt, um den Primärschlüssel zu verarbeiten, der von der gespeicherten Prozedur zurückgegeben wird.In this example, an additional parameter is added in the OnInserting event handler to handle the primary key that is returned by the stored procedure.

Nachdem DetailsView die Daten vom-Steuerelement in die Datenbank eingefügt wurden, wird der OnInserted Ereignishandler aufgerufen, um das Inserted -Ereignis zu behandeln, der Wert des Primärschlüssels der eingefügten Zeile wird DataBind angezeigt, und die-Methode des GridView das Steuerelement wird explizit aufgerufen, um die Daten zu aktualisieren.Finally, after data is inserted into the database by the DetailsView control, the OnInserted event handler is called to handle the Inserted event, the value of the primary key of the inserted row is displayed and the DataBind method of the GridView control is called explicitly to refresh the data.

<%@Page  Language="C#" %>
<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.Data.Common" %>
<%@Import Namespace="System.Data.SqlClient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
 private void On_Inserting(Object sender, SqlDataSourceCommandEventArgs e) {

    SqlParameter insertedKey = new SqlParameter("@PK_New", SqlDbType.Int);
    insertedKey.Direction    = ParameterDirection.Output;        
    e.Command.Parameters.Add(insertedKey);
 }

 private void On_Inserted(Object sender, SqlDataSourceStatusEventArgs e) {
    DbCommand command = e.Command;    
    
    // The label displays the primary key of the recently inserted row.
    Label1.Text = command.Parameters["@PK_New"].Value.ToString();
    
    // Force a refresh after the data is inserted.
    GridView1.DataBind();
 }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">

      <asp:GridView
        id="GridView1"
        runat="server"
        AutoGenerateColumns="False"
        DataKeyNames="EmployeeID"        
        DataSourceID="SqlDataSource1">
        <columns>          
          <asp:BoundField HeaderText="First Name" DataField="FirstName" />
          <asp:BoundField HeaderText="Last Name" DataField="LastName" />
          <asp:BoundField HeaderText="Title" DataField="Title" />
          <asp:ButtonField ButtonType="Link" CommandName="Select" Text="Details..." />
        </columns>
      </asp:GridView>

      <asp:SqlDataSource
        id="SqlDataSource1"
        runat="server"
        ConnectionString="<%$ ConnectionStrings:MyNorthwind %>"
        SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
      </asp:SqlDataSource>

      <hr />

      <asp:DetailsView
        id="DetailsView1"
        runat="server"
        DataSourceID="SqlDataSource2"
        AutoGenerateRows="False"
        AutoGenerateInsertButton="True">
        <fields>
          <asp:BoundField HeaderText="First Name" DataField="FirstName" ReadOnly="False"/>
          <asp:BoundField HeaderText="Last Name" DataField="LastName" ReadOnly="False"/>
          <asp:TemplateField HeaderText="Title">
            <ItemTemplate>
              <asp:DropDownList
                id="TitleDropDownList"
                runat="server"
                selectedvalue="<%# Bind('Title') %>" >
                <asp:ListItem Selected="True">Sales Representative</asp:ListItem>
                <asp:ListItem>Sales Manager</asp:ListItem>
                <asp:ListItem>Vice President, Sales</asp:ListItem>
              </asp:DropDownList>
            </ItemTemplate>
          </asp:TemplateField>
          <asp:BoundField HeaderText="Notes" DataField="Notes" ReadOnly="False"/>
        </fields>
      </asp:DetailsView>


      <asp:SqlDataSource
        id="SqlDataSource2"
        runat="server"
        ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
        SelectCommand="SELECT * FROM Employees"
        InsertCommandType = "StoredProcedure"
        InsertCommand="sp_insertemployee"        
        OnInserting="On_Inserting"
        OnInserted ="On_Inserted"
        FilterExpression="EmployeeID={0}">
        <FilterParameters>
          <asp:ControlParameter Name="EmployeeID" ControlId="GridView1" PropertyName="SelectedValue" />
        </FilterParameters>
      </asp:SqlDataSource>

<!-- 
     -- An example sp_insertemployee stored procedure that returns
     -- the primary key of the row that was inserted in an OUT parameter.
     CREATE PROCEDURE sp_insertemployee 
        @FirstName nvarchar(10), 
        @LastName nvarchar(20) , 
        @Title nvarchar(30), 
        @Notes nvarchar(200), 
        @PK_New int OUTPUT
      AS
        INSERT INTO Employees(FirstName,LastName,Title,Notes)VALUES (@FirstName,@LastName,@Title,@Notes)
        SELECT @PK_New = @@IDENTITY
        RETURN (1)    
      GO
-->      

      <asp:Label 
        id="Label1"
        runat="server" />
      
    </form>
  </body>
</html>
<%@Page  Language="VB" %>
<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.Data.Common" %>
<%@Import Namespace="System.Data.SqlClient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

 Sub On_Inserting(ByVal sender As Object, ByVal e As SqlDataSourceCommandEventArgs)

    Dim insertedKey As SqlParameter  
    insertedKey = New SqlParameter("@PK_New", SqlDbType.Int)
    insertedKey.Direction    = ParameterDirection.Output     
    
    e.Command.Parameters.Add(insertedKey)

 End Sub 'On_Inserting

 Sub On_Inserted(ByVal sender As Object, ByVal e As SqlDataSourceStatusEventArgs)
    Dim command As DbCommand 
    command = e.Command
    
    ' The label displays the primary key of the recently inserted row.
    Label1.Text = command.Parameters("@PK_New").Value.ToString()    
    
    ' Explicitly call DataBind to refresh the data
    ' and show the newly inserted row.
    GridView1.DataBind()
 End Sub 'On_Inserted

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">

      <asp:GridView
        id="GridView1"
        runat="server"
        AutoGenerateColumns="False"
        DataKeyNames="EmployeeID"        
        DataSourceID="SqlDataSource1">
        <columns>          
          <asp:BoundField HeaderText="First Name" DataField="FirstName" />
          <asp:BoundField HeaderText="Last Name" DataField="LastName" />
          <asp:BoundField HeaderText="Title" DataField="Title" />
          <asp:ButtonField ButtonType="Link" CommandName="Select" Text="Details..." />
        </columns>
      </asp:GridView>

      <asp:SqlDataSource
        id="SqlDataSource1"
        runat="server"
        ConnectionString="<%$ ConnectionStrings:MyNorthwind %>"
        SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
      </asp:SqlDataSource>

      <hr />

      <asp:DetailsView
        id="DetailsView1"
        runat="server"
        DataSourceID="SqlDataSource2"
        AutoGenerateRows="False"
        AutoGenerateInsertButton="True">
        <fields>
          <asp:BoundField HeaderText="First Name" DataField="FirstName" ReadOnly="False"/>
          <asp:BoundField HeaderText="Last Name" DataField="LastName" ReadOnly="False"/>
          <asp:TemplateField HeaderText="Title">
            <ItemTemplate>
              <asp:DropDownList
                id="TitleDropDownList"
                runat="server"
                selectedvalue="<%# Bind('Title') %>" >
                <asp:ListItem Selected="True">Sales Representative</asp:ListItem>
                <asp:ListItem>Sales Manager</asp:ListItem>
                <asp:ListItem>Vice President, Sales</asp:ListItem>
              </asp:DropDownList>
            </ItemTemplate>
          </asp:TemplateField>
          <asp:BoundField HeaderText="Notes" DataField="Notes" ReadOnly="False"/>
        </fields>
      </asp:DetailsView>


      <asp:SqlDataSource
        id="SqlDataSource2"
        runat="server"
        ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
        SelectCommand="SELECT * FROM Employees"
        InsertCommandType = "StoredProcedure"
        InsertCommand="sp_insertemployee"        
        OnInserting="On_Inserting"
        OnInserted ="On_Inserted"
        FilterExpression="EmployeeID={0}">
        <FilterParameters>
          <asp:ControlParameter Name="EmployeeID" ControlId="GridView1" PropertyName="SelectedValue" />
        </FilterParameters>
      </asp:SqlDataSource>

<!-- 
     -- An example sp_insertemployee stored procedure that returns
     -- the primary key of the row that was inserted in an OUT parameter.
     CREATE PROCEDURE sp_insertemployee 
        @FirstName nvarchar(10), 
        @LastName nvarchar(20) , 
        @Title nvarchar(30), 
        @Notes nvarchar(200), 
        @PK_New int OUTPUT
      AS
        INSERT INTO Employees(FirstName,LastName,Title,Notes)VALUES (@FirstName,@LastName,@Title,@Notes)
        SELECT @PK_New = @@IDENTITY
        RETURN (1)    
      GO
-->      

      <asp:Label 
        id="Label1"
        runat="server" />
      
    </form>
  </body>
</html>

Hinweise

Stellt entweder eine SQL-Abfrage oder den Namen einer gespeicherten Prozedur dar und wird von der Insert -Methode verwendet. InsertCommandThe InsertCommand represents either an SQL query or the name of a stored procedure, and is used by the Insert method.

Da die jeweiligen Datenbankprodukte verschiedene SQL-Varianten verwenden, hängt die Syntax der SQL-Zeichenfolge vom derzeit verwendeten ADO.NET-Anbieter ab, der durch die ProviderName-Eigenschaft identifiziert wird.Because different database products use different varieties of SQL, the syntax of the SQL string depends on the current ADO.NET provider being used, which is identified by the ProviderName property. Wenn die SQL-Zeichenfolge eine parametrisierte Abfrage oder ein parametrisierter Befehl ist, hängt der Platzhalter des Parameters ebenfalls vom verwendeten ADO.NET-Anbieter ab.If the SQL string is a parameterized query or command, the placeholder of the parameter also depends on the ADO.NET provider being used. Wenn der Anbieter System.Data.SqlClientz. b. der-Standardanbieter für die SqlDataSource -Klasse ist, ist '@parameterName'der Platzhalter des-Parameters.For example, if the provider is the System.Data.SqlClient, which is the default provider for the SqlDataSource class, the placeholder of the parameter is '@parameterName'. Wenn der Anbieter jedoch auf System.Data.Odbc oder System.Data.OleDbfestgelegt ist, ist '?'der Platzhalter des-Parameters.However, if the provider is set to the System.Data.Odbc or System.Data.OleDb, the placeholder of the parameter is '?'. Weitere Informationen über parametrisierte SQL-Abfragen und-Befehle finden Sie unter Verwenden von Parametern mit dem SqlDataSource-SteuerElement.For more information about parameterized SQL queries and commands, see Using Parameters with the SqlDataSource Control.

InsertCommand Kann eine SQL-Zeichenfolge oder der Name einer gespeicherten Prozedur sein, wenn die Datenquelle gespeicherte Prozeduren unterstützt.The InsertCommand can be an SQL string or the name of a stored procedure, if the data source supports stored procedures.

Diese Eigenschaft delegiert an die InsertCommand -Eigenschaft SqlDataSourceView des-Objekts, das dem SqlDataSource -Steuerelement zugeordnet ist.This property delegates to the InsertCommand property of the SqlDataSourceView that is associated with the SqlDataSource control.

Wichtig

Aus Sicherheitsgründen wird die InsertCommand -Eigenschaft nicht im Ansichts Zustand gespeichert.For security purposes, the InsertCommand property is not stored is view state. Da es möglich ist, den Inhalt des Ansichts Zustands auf dem Client zu decodieren, kann das Speichern sensibler Informationen über die Datenbankstruktur im Ansichts Zustand zu einem Sicherheitsrisiko bei der Offenlegung von Informationen führen.Because it is possible to decode the contents of view state on the client, storing sensitive information about the database structure in view state could result in an information disclosure vulnerability.

Wichtig

Werte werden ohne Validierung in Parameter eingefügt, was ein potenzielles Sicherheitsrisiko darstellt.Values are inserted into parameters without validation, which is a potential security threat. Verwenden Sie Filtering das-Ereignis, um Parameterwerte vor dem Ausführen der Abfrage zu überprüfen.Use the Filtering event to validate parameter values before executing the query. Weitere Informationen finden Sie unter Übersicht über Skriptangriffe.For more information, see Script Exploits Overview.

Gilt für:

Siehe auch