SqlDataSource.InsertCommand Свойство

Определение

Возвращает или задает SQL-строку, используемую элементом управления SqlDataSource для вставки данных в основную базу данных.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

Значение свойства

SQL-строка, используемая объектом SqlDataSource для вставки данных.An SQL string that the SqlDataSource uses to insert data.

Примеры

Этот раздел содержит два примера кода.This section contains two code examples. В первом примере кода показано, SqlDataSource как вставлять данные в базу данных с помощью элемента управления и простой страницы веб-форм.The first code example demonstrates how to insert data into a database using the SqlDataSource control and a simple Web Forms page. Во втором примере кода показано, как извлечь данные из Microsoft SQL Server и отобразить их в GridView элементе управления и как DetailsView использовать элемент управления для просмотра подробных сведений о выбранной строке в GridView элементе управления и в виде формы для вставки новых записей.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.

Примечание

В этих примерах показано, как использовать декларативный синтаксис для доступа к данным.These examples show how to use declarative syntax for data access. Дополнительные сведения о доступе к данным с помощью кода вместо разметки см. в разделе доступ к данным в Visual Studio.For information about how to access data by using code instead of markup, see Accessing data in Visual Studio.

В следующем примере кода показано, SqlDataSource как вставлять данные в базу данных с помощью элемента управления и простой страницы веб-форм.The following code example demonstrates how to insert data into a database using the SqlDataSource control and a simple Web Forms page. Текущие данные в таблице данных отображаются в DropDownList элементе управления.The current data in the Data table is displayed in the DropDownList control. Можно добавить новые записи, введя значения в TextBox элементы управления, а затем нажав кнопку Вставить .You can add new records by entering values into the TextBox controls, and then clicking the Insert button. При нажатии кнопки вставки заданные значения вставляются в базу данных, и DropDownList элемент управления обновляется.When the Insert button is clicked, the specified values are inserted into the database, and the DropDownList control is refreshed.

Важно!

Этот пример включает текстовое поле, которое принимает ввод пользователя, что является потенциальной угрозой безопасности, а значения вставляются в параметры без проверки, что также является потенциальной угрозой безопасности.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. Inserting Используйте событие для проверки значений параметров перед выполнением запроса.Use the Inserting event to validate parameter values before executing the query. Дополнительные сведения см. в разделе Общие сведения об использовании сценариев.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>

В следующем примере кода показано, как извлечь данные из SQL Server и отобразить их в GridView элементе управления и как DetailsView использовать элемент управления для просмотра подробных сведений о выбранной строке в GridView элементе управления и в виде формы для вставки новых записей.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.

Изначально данные отображаются в GridView элементе управления, а выбранная строка GridView также отображается в DetailsView элементе управления.Initially, the data is displayed in the GridView control, and the selected row of the GridView is also displayed in the DetailsView control. FilterExpression DetailsView FilterParameters GridView Элементы управления DetailsView и используют различные элементы управления источниками данных; объект, связанный с, имеет свойства и, что гарантирует, что выбранная строка имеет значение GridView отображаем.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.

Если щелкнуть автоматически созданную DetailsView кнопку вставки элемента управления, DetailsView отображается другой пользовательский интерфейс, который используется для вставки новой записи.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. В примере хранимая процедура используется для вставки записей и возврата первичного ключа вставляемой строки.The example uses a stored procedure to insert records and returns the primary key of the inserted row. При вставке записи DetailsView объект автоматически заполняет InsertParameters коллекцию значениями из Insert связанных столбцов и вызывает метод.If you insert a record, the DetailsView automatically populates the InsertParameters collection with values from the bound columns and calls the Insert method. Объект может вычислять правильные параметры из любого BoundField объекта TemplateField и параметр для объекта при использовании синтаксиса ASP.NET-двусторонней привязки данных. DetailsViewThe 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. В этом примере в обработчик OnInserting событий добавляется дополнительный параметр для обработки первичного ключа, возвращаемого хранимой процедурой.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.

Наконец, после вставки данных в базу DetailsView данных с помощью элемента управления OnInserted обработчик событий вызывается для обработки Inserted события, отображается значение первичного ключа вставляемой строки и DataBind метод GridView для обновления данных вызывается явное управление.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>

Комментарии

Объект InsertCommand представляет либо SQL-запрос, либо имя хранимой процедуры, и используется Insert методом.The InsertCommand represents either an SQL query or the name of a stored procedure, and is used by the Insert method.

Различные системы баз данных используют различные диалекты SQL, поэтому синтаксис строки SQL зависит от используемого в данный момент поставщика ADO.NET, который определяется свойством ProviderName.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. Если строка SQL представляет собой параметризованный запрос или команду, заполнитель параметра также зависит от используемого поставщика ADO.NET.If the SQL string is a parameterized query or command, the placeholder of the parameter also depends on the ADO.NET provider being used. Например, если поставщик является System.Data.SqlClientпоставщиком по умолчанию SqlDataSource для класса, заполнитель параметра имеет '@parameterName'значение.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'. Однако если поставщику задано System.Data.Odbc значение или System.Data.OleDb, заполнитель параметра имеет '?'значение.However, if the provider is set to the System.Data.Odbc or System.Data.OleDb, the placeholder of the parameter is '?'. Дополнительные сведения о параметризованных запросах SQL и командах см. в разделе Использование параметров с элементом управления SqlDataSource.For more information about parameterized SQL queries and commands, see Using Parameters with the SqlDataSource Control.

InsertCommand Может быть строкой SQL или именем хранимой процедуры, если источник данных поддерживает хранимые процедуры.The InsertCommand can be an SQL string or the name of a stored procedure, if the data source supports stored procedures.

Это свойство делегирует InsertCommand свойству SqlDataSourceView объекта SqlDataSource , связанного с элементом управления.This property delegates to the InsertCommand property of the SqlDataSourceView that is associated with the SqlDataSource control.

Важно!

В целях безопасности свойство не InsertCommand хранится в состоянии представления.For security purposes, the InsertCommand property is not stored is view state. Так как можно декодировать содержимое состояния представления на клиенте, хранение конфиденциальной информации о структуре базы данных в состоянии представления может привести к уязвимости раскрытия информации.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.

Важно!

Значения вставляются в параметры без проверки, что является потенциальной угрозой безопасности.Values are inserted into parameters without validation, which is a potential security threat. Filtering Используйте событие для проверки значений параметров перед выполнением запроса.Use the Filtering event to validate parameter values before executing the query. Дополнительные сведения см. в разделе Общие сведения об использовании сценариев.For more information, see Script Exploits Overview.

Применяется к

Дополнительно