SqlDataSource.InsertCommand Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Dient zum Abrufen oder Festlegen der SQL-Zeichenfolge, die vom SqlDataSource Steuerelement zum Einfügen von Daten in die zugrunde liegende Datenbank verwendet wird.
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 zum Einfügen von SqlDataSource Daten verwendet wird.
Beispiele
Dieser Abschnitt enthält zwei Codebeispiele. Das erste Codebeispiel veranschaulicht, wie Daten mithilfe des SqlDataSource Steuerelements und einer einfachen Webseite in eine Datenbank eingefügt werden. Im zweiten Codebeispiel wird veranschaulicht, wie Daten aus Microsoft SQL Server abgerufen und in einem GridView Steuerelement angezeigt und wie ein DetailsView Steuerelement verwendet wird, um Details einer ausgewählten Zeile in das GridView Steuerelement und als Formular zum Einfügen neuer Datensätze anzuzeigen.
Hinweis
In diesen Beispielen wird gezeigt, wie sie die deklarative Syntax für den Datenzugriff verwenden. Informationen zum Zugreifen auf Daten mithilfe von Code anstelle von Markup finden Sie unter Zugreifen auf Daten in Visual Studio.
Im folgenden Codebeispiel wird veranschaulicht, wie Daten mithilfe des SqlDataSource Steuerelements und einer einfachen Webseite in eine Datenbank eingefügt werden. Die aktuellen Daten in der Datentabelle werden im DropDownList Steuerelement angezeigt. Sie können neue Datensätze hinzufügen, indem Sie Werte in die TextBox Steuerelemente eingeben und dann auf die Schaltfläche "Einfügen " klicken. Wenn auf die Schaltfläche "Einfügen " geklickt wird, werden die angegebenen Werte in die Datenbank eingefügt, und das DropDownList Steuerelement wird aktualisiert.
Von Bedeutung
Dieses Beispiel enthält ein Textfeld, das Benutzereingaben akzeptiert, bei denen es sich um eine potenzielle Sicherheitsrisiken handelt, und Werte werden ohne Überprüfung in Parameter eingefügt, was auch eine potenzielle Sicherheitsrisiken darstellt. Verwenden Sie das Inserting Ereignis, um Parameterwerte zu überprüfen, bevor Sie die Abfrage ausführen. Weitere Informationen finden Sie unter 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 und wie ein DetailsView Steuerelement verwendet wird, um Details einer ausgewählten Zeile im GridView Steuerelement und als Formular zum Einfügen neuer Datensätze anzuzeigen.
Zunächst werden die Daten im GridView Steuerelement angezeigt, und die ausgewählte Zeile des GridView Steuerelements wird ebenfalls im DetailsView Steuerelement angezeigt. Die GridView Steuerelemente und DetailsView Steuerelemente verwenden unterschiedliche Datenquellensteuerelemente. Das Steuerelement, das mit den DetailsViewFilterExpression Eigenschaften verknüpft FilterParameters ist, stellt sicher, dass die ausgewählte Zeile des GridView Steuerelements angezeigt wird.
Wenn Sie auf die automatisch generierte Schaltfläche " Einfügen " des DetailsView Steuerelements klicken, DetailsView wird eine andere Benutzeroberfläche angezeigt, die zum Einfügen eines neuen Datensatzes verwendet wird. Im Beispiel wird eine gespeicherte Prozedur verwendet, um Datensätze einzufügen und den Primärschlüssel der eingefügten Zeile zurückzugeben. Wenn Sie einen Datensatz einfügen, füllt die DetailsView Auflistung automatisch mit Werten aus den gebundenen InsertParameters Spalten auf und ruft die Insert Methode auf. Die DetailsView richtigen Parameter können von jedem BoundField Objekt und einem Parameter für das TemplateField Objekt abgeleitet werden, wenn die ASP.NET bidirektionale Datenbindungssyntax verwendet wird. In diesem Beispiel wird im OnInserting Ereignishandler ein zusätzlicher Parameter hinzugefügt, um den Primärschlüssel zu behandeln, der von der gespeicherten Prozedur zurückgegeben wird.
Nachdem daten vom DetailsView 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 angezeigt, und die DataBind Methode des GridView Steuerelements wird explizit aufgerufen, um die Daten zu aktualisieren.
<%@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
Dies InsertCommand stellt entweder eine SQL-Abfrage oder den Namen einer gespeicherten Prozedur dar und wird von der Insert Methode verwendet.
Da unterschiedliche Datenbankprodukte unterschiedliche SQL-Varianten verwenden, hängt die Syntax der SQL-Zeichenfolge von dem aktuellen ADO.NET verwendeten Anbieter ab, der von der ProviderName Eigenschaft identifiziert wird. Wenn es sich bei der SQL-Zeichenfolge um eine parametrisierte Abfrage oder einen parametrisierten Befehl handelt, hängt der Platzhalter des Parameters auch vom verwendeten ADO.NET Anbieter ab. Wenn der Anbieter beispielsweise der System.Data.SqlClientStandardanbieter für die SqlDataSource Klasse ist, lautet '@parameterName'der Platzhalter des Parameters . Wenn der Anbieter jedoch auf den System.Data.Odbc Oder-Wert System.Data.OleDbfestgelegt ist, lautet '?'der Platzhalter des Parameters . Weitere Informationen zu parametrisierten SQL-Abfragen und -Befehlen finden Sie unter Verwenden von Parametern mit dem SqlDataSource-Steuerelement.
Dies InsertCommand kann eine SQL-Zeichenfolge oder der Name einer gespeicherten Prozedur sein, wenn die Datenquelle gespeicherte Prozeduren unterstützt.
Diese Eigenschaft delegiert an die InsertCommand Eigenschaft des Steuerelements, das SqlDataSourceView dem SqlDataSource Steuerelement zugeordnet ist.
Von Bedeutung
Für Sicherheitszwecke wird die InsertCommand Eigenschaft nicht gespeichert, ist der Ansichtszustand. Da es möglich ist, den Inhalt des Ansichtszustands auf dem Client zu decodieren, kann das Speichern vertraulicher Informationen über die Datenbankstruktur im Ansichtszustand zu einer Sicherheitslücke zur Offenlegung von Informationen führen.
Von Bedeutung
Werte werden ohne Überprüfung in Parameter eingefügt, was eine potenzielle Sicherheitsgefahr ist. Verwenden Sie das Filtering Ereignis, um Parameterwerte zu überprüfen, bevor Sie die Abfrage ausführen. Weitere Informationen finden Sie unter Script Exploits Overview.