ObjectDataSource.InsertMethod Eigenschap

Definitie

Hiermee haalt u de naam op van de methode of functie die door het ObjectDataSource besturingselement wordt aangeroepen om gegevens in te voegen.

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

Waarde van eigenschap

Een tekenreeks die de naam vertegenwoordigt van de methode of functie die wordt ObjectDataSource gebruikt om gegevens in te voegen. De standaardwaarde is een lege tekenreeks ("").

Voorbeelden

Deze sectie bevat twee codevoorbeelden. In het eerste codevoorbeeld ziet u hoe u een ObjectDataSource object gebruikt met een zakelijk object en een DetailsView besturingselement om gegevens in te voegen. Het tweede codevoorbeeld bevat een voorbeeld van het zakelijke object in de middelste laag dat wordt gebruikt in het eerste codevoorbeeld.

In het volgende codevoorbeeld ziet u hoe u een ObjectDataSource besturingselement gebruikt met een bedrijfsobject en een DetailsView besturingselement om gegevens in te voegen. In eerste instantie DetailsView wordt een nieuwe NorthwindEmployee record weergegeven, samen met een automatisch gegenereerde knop Invoegen . Nadat u gegevens hebt ingevoerd in de velden van het DetailsView besturingselement, klikt u op de knop Invoegen . De InsertMethod eigenschap geeft aan welke methode de invoegbewerking uitvoert.

In dit voorbeeld wordt de UpdateEmployeeInfo methode gebruikt om een invoegbewerking uit te voeren. Hiervoor is echter een NorthwindEmployee parameter vereist om de gegevens in te voegen. Daarom is de verzameling tekenreeksen die het DetailsView besturingselement automatisch doorgeeft, niet voldoende. De NorthwindEmployeeInserting gemachtigde is een ObjectDataSourceMethodEventHandler object waarmee de Inserting gebeurtenis wordt verwerkt en waarmee u de invoerparameters kunt bewerken voordat de Insert bewerking wordt uitgevoerd. Omdat voor de UpdateEmployeeInfo methode een NorthwindEmployee object als parameter is vereist, wordt er een gemaakt met behulp van de verzameling tekenreeksen en wordt deze toegevoegd aan de InputParameters verzameling met behulp van een parameternaam (ne) die door de methode wordt verwacht. U kunt bijvoorbeeld stappen uitvoeren wanneer u een bestaand object in de middelste laag als gegevensbron gebruikt met typen en methoden die niet specifiek zijn ontworpen voor gebruik met het ObjectDataSource besturingselement.

Wanneer de Insert bewerking wordt uitgevoerd, wordt de methode die wordt geïdentificeerd door de InsertMethod eigenschap aangeroepen. Als de Insert methode van het object een methodehandtekening bevat die parameters bevat, moet de InsertParameters verzameling een parameter bevatten met namen die overeenkomen met de parameters voor de methodehandtekening om de Insert methode te voltooien.

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ Import namespace="Samples.AspNet.CS" %>
<%@ 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 NorthwindEmployeeInserting(object source, ObjectDataSourceMethodEventArgs e)
{
  // The business object expects a custom type. Build it
  // and add it to the parameters collection.
  
  IDictionary paramsFromPage = e.InputParameters;

  NorthwindEmployee ne = new NorthwindEmployee();

  ne.FirstName  = paramsFromPage["FirstName"].ToString();
  ne.LastName   = paramsFromPage["LastName"].ToString();
  ne.Title      = paramsFromPage["Title"].ToString();
  ne.Courtesy   = paramsFromPage["Courtesy"].ToString();
  ne.Supervisor = Int32.Parse(paramsFromPage["Supervisor"].ToString());

  paramsFromPage.Clear();
  paramsFromPage.Add("ne", ne);
}

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - C# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <asp:detailsview
          id="DetailsView1"
          runat="server"
          autogenerateinsertbutton="True"
          datasourceid="ObjectDataSource1">
        </asp:detailsview>

        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          selectmethod="GetEmployee"
          insertmethod="UpdateEmployeeInfo"
          oninserting="NorthwindEmployeeInserting"
          typename="Samples.AspNet.CS.EmployeeLogic"
          >
          <selectparameters>
            <asp:parameter name="anID" defaultvalue="-1" />
          </selectparameters>
        </asp:objectdatasource>

    </form>
  </body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB" Assembly="Samples.AspNet.VB" %>
<%@ Import namespace="Samples.AspNet.VB" %>
<%@ 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 NorthwindEmployeeInserting(source As Object, e As ObjectDataSourceMethodEventArgs)

  ' The GridView control passes an array of strings in the parameters
  ' collection because that is the type it knows how to work with.
  ' However, the business object expects a custom type. Build it
  ' and add it to the parameters collection.
  Dim paramsFromPage As IDictionary = e.InputParameters

  Dim ne As New NorthwindEmployee()
  ne.FirstName  = paramsFromPage("FirstName").ToString()
  ne.LastName   = paramsFromPage("LastName").ToString()
  ne.Title      = paramsFromPage("Title").ToString()
  ne.Courtesy   = paramsFromPage("Courtesy").ToString()
  ne.Supervisor = Int32.Parse(paramsFromPage("Supervisor").ToString())
  
  paramsFromPage.Clear()
  paramsFromPage.Add("ne", ne)
End Sub ' NorthwindEmployeeInserting

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - VB Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <asp:detailsview
          id="DetailsView1"
          runat="server"
          autogenerateinsertbutton="True"
          datasourceid="ObjectDataSource1">
        </asp:detailsview>

        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          selectmethod="GetEmployee"
          insertmethod="UpdateEmployeeInfo"
          oninserting="NorthwindEmployeeInserting"
          typename="Samples.AspNet.VB.EmployeeLogic" >
          <selectparameters>
            <asp:parameter name="anID" defaultvalue="-1" />
          </selectparameters>
        </asp:objectdatasource>

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

Het volgende codevoorbeeld bevat een voorbeeld van een bedrijfsobject in de middelste laag dat in het voorgaande codevoorbeeld wordt gebruikt. Het codevoorbeeld bestaat uit twee basisklassen:

  • De EmployeeLogic klasse, een staatloze klasse die bedrijfslogica inkapselt.

  • De NorthwindEmployee klasse, een modelklasse die alleen de basisfunctionaliteit bevat die nodig is voor het laden en behouden van gegevens uit de gegevenslaag.

Er wordt een extra NorthwindDataException klasse aangeboden als gemak. Voor een volledig werkvoorbeeld moet u deze klassen compileren en gebruiken. De UpdateEmployeeInfo methode is niet volledig geïmplementeerd, dus u voegt geen gegevens in de Northwind Traders-database in wanneer u experimenteert met dit voorbeeld.

namespace Samples.AspNet.CS {

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
  //
  // EmployeeLogic is a stateless business object that encapsulates
  // the operations you can perform on a NorthwindEmployee object.
  //
  public class EmployeeLogic {

    // Returns a collection of NorthwindEmployee objects.
    public static ICollection GetAllEmployees () {
      ArrayList al = new ArrayList();

      ConnectionStringSettings cts = ConfigurationManager.ConnectionStrings["NorthwindConnection"];

      SqlDataSource sds
        = new SqlDataSource(cts.ConnectionString,
                            "SELECT EmployeeID FROM Employees");
      try {
        IEnumerable IDs = sds.Select(DataSourceSelectArguments.Empty);

        // Iterate through the Enumeration and create a
        // NorthwindEmployee object for each ID.
        IEnumerator enumerator = IDs.GetEnumerator();
        while (enumerator.MoveNext()) {
          // The IEnumerable contains DataRowView objects.
          DataRowView row = enumerator.Current as DataRowView;
          string id = row["EmployeeID"].ToString();
          NorthwindEmployee nwe = new NorthwindEmployee(id);
          // Add the NorthwindEmployee object to the collection.
          al.Add(nwe);
        }
      }
      finally {
        // If anything strange happens, clean up.
        sds.Dispose();
      }

      return al;
    }

    public static NorthwindEmployee GetEmployee(object anID) {
      if (anID.Equals("-1") ||
          anID.Equals(DBNull.Value) ) {
        return new NorthwindEmployee();
      }
      else {
        return new NorthwindEmployee(anID);
      }
    }

    public static void UpdateEmployeeInfo(NorthwindEmployee ne) {
      bool retval = ne.Save();
      if (!retval) { throw new NorthwindDataException("UpdateEmployee failed."); }
    }

    public static void DeleteEmployee(NorthwindEmployee ne) {
      bool retval = ne.Delete();
      if (!retval) { throw new NorthwindDataException("DeleteEmployee failed."); }
    }

    // And so on...
  }

  public class NorthwindEmployee {

    public NorthwindEmployee () {
      ID = DBNull.Value;
      lastName = "";
      firstName = "";
      title="";
      titleOfCourtesy = "";
      reportsTo = -1;
    }

    public NorthwindEmployee (object anID) {
      this.ID = anID;

      SqlConnection conn
        = new SqlConnection (ConfigurationManager.ConnectionStrings["NorthwindConnection"].ConnectionString);
      SqlCommand sc =
        new SqlCommand(" SELECT FirstName,LastName,Title,TitleOfCourtesy,ReportsTo " +
                       " FROM Employees " +
                       " WHERE EmployeeID = @empId",
                       conn);
      // Add the employee ID parameter and set its value.
      sc.Parameters.Add(new SqlParameter("@empId",SqlDbType.Int)).Value = Int32.Parse(anID.ToString());
      SqlDataReader sdr = null;

      try {
        conn.Open();
        sdr = sc.ExecuteReader();

        // Only loop once.
        if (sdr != null && sdr.Read()) {
          // The IEnumerable contains DataRowView objects.
          this.firstName        = sdr["FirstName"].ToString();
          this.lastName         = sdr["LastName"].ToString();
          this.title            = sdr["Title"].ToString();
          this.titleOfCourtesy  = sdr["TitleOfCourtesy"].ToString();
          if (!sdr.IsDBNull(4)) {
            this.reportsTo        = sdr.GetInt32(4);
          }
        }
        else {
          throw new NorthwindDataException("Data not loaded for employee id.");
        }
      }
      finally {
        try {
          if (sdr != null) sdr.Close();
          conn.Close();
        }
        catch (SqlException) {
          // Log an event in the Application Event Log.
          throw;
        }
      }
    }

    private object ID;
    public string EmpID {
      get { return ID.ToString();  }
    }

    private string lastName;
    public string LastName {
      get { return lastName; }
      set { lastName = value; }
    }

    private string firstName;
    public string FirstName {
      get { return firstName; }
      set { firstName = value;  }
    }

    public string FullName {
      get { return FirstName + " " + LastName; }
    }

    private string title;
    public String Title {
      get { return title; }
      set { title = value; }
    }

    private string titleOfCourtesy;
    public string Courtesy {
      get { return titleOfCourtesy; }
      set { titleOfCourtesy = value; }
    }

    private int    reportsTo;
    public int Supervisor {
      get { return reportsTo; }
      set { reportsTo = value; }
    }

    public bool Save () {
      // Implement persistence logic.
      return true;
    }

    public bool Delete () {
      // Implement delete logic.
      return true;
    }
  }

  internal class NorthwindDataException: Exception {
    public NorthwindDataException(string msg) : base (msg) { }
  }
}
Imports System.Collections
Imports System.Configuration
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.UI
Imports System.Web.UI.WebControls

Namespace Samples.AspNet.VB

'
' EmployeeLogic is a stateless business object that encapsulates
' the operations you can perform on a NorthwindEmployee object.
'
Public Class EmployeeLogic

   ' Returns a collection of NorthwindEmployee objects.
   Public Shared Function GetAllEmployees() As ICollection

      Dim al As New ArrayList()

      Dim cts As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("NorthwindConnection")

      Dim sds As New SqlDataSource(cts.ConnectionString, "SELECT EmployeeID FROM Employees")

      Try
         Dim IDs As IEnumerable = sds.Select(DataSourceSelectArguments.Empty)

         ' Iterate through the Enumeration and create a
         ' NorthwindEmployee object for each ID.
         Dim enumerator As IEnumerator = IDs.GetEnumerator()
         While enumerator.MoveNext()
            ' The IEnumerable contains DataRowView objects.
            Dim row As DataRowView = CType(enumerator.Current,DataRowView)
            Dim id As String = row("EmployeeID").ToString()
            Dim nwe As New NorthwindEmployee(id)
            ' Add the NorthwindEmployee object to the collection.
            al.Add(nwe)
         End While
      Finally
         ' If anything strange happens, clean up.
         sds.Dispose()
      End Try

      Return al
   End Function 'GetAllEmployees


   Public Shared Function GetEmployee(anID As Object) As NorthwindEmployee
      If anID.Equals("-1") OrElse anID.Equals(DBNull.Value) Then
         Return New NorthwindEmployee()
      Else
         Return New NorthwindEmployee(anID)
      End If
   End Function 'GetEmployee


   Public Shared Sub UpdateEmployeeInfo(ne As NorthwindEmployee)
      Dim retval As Boolean = ne.Save()
      If Not retval Then
         Throw New NorthwindDataException("UpdateEmployee failed.")
      End If
   End Sub

   Public Shared Sub DeleteEmployee(ne As NorthwindEmployee)
      Dim retval As Boolean = ne.Delete()
      If Not retval Then
         Throw New NorthwindDataException("DeleteEmployee failed.")
      End If
   End Sub

   ' And so on...

End Class


Public Class NorthwindEmployee


   Public Sub New()
      ID = DBNull.Value
      lastName = ""
      firstName = ""
      title = ""
      titleOfCourtesy = ""
      reportsTo = - 1
   End Sub


   Public Sub New(anID As Object)
      Me.ID = anID

      Dim cts As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("NorthwindConnection")

      Dim conn As New SqlConnection(cts.ConnectionString)

      Dim sc As New SqlCommand(" SELECT FirstName,LastName,Title,TitleOfCourtesy,ReportsTo " & _
                               " FROM Employees " & _
                               " WHERE EmployeeID = @empId", conn)

      ' Add the employee ID parameter and set its value.
      sc.Parameters.Add(New SqlParameter("@empId", SqlDbType.Int)).Value = Int32.Parse(anID.ToString())
      Dim sdr As SqlDataReader = Nothing

      Try
         conn.Open()
         sdr = sc.ExecuteReader()

         ' Only loop once.
         If Not (sdr Is Nothing) AndAlso sdr.Read() Then
            ' The IEnumerable contains DataRowView objects.
            Me.aFirstName = sdr("FirstName").ToString()
            Me.aLastName = sdr("LastName").ToString()
            Me.aTitle = sdr("Title").ToString()
            Me.titleOfCourtesy = sdr("TitleOfCourtesy").ToString()
            If Not sdr.IsDBNull(4) Then
               Me.reportsTo = sdr.GetInt32(4)
            End If
         Else
            Throw New NorthwindDataException("Data not loaded for employee id.")
         End If
      Finally
         Try
            If Not (sdr Is Nothing) Then
               sdr.Close()
            End If
            conn.Close()
         Catch se As SqlException
            ' Log an event in the Application Event Log.
            Throw
         End Try
      End Try
   End Sub

   Private ID As Object
   Public ReadOnly Property EmpID() As String
      Get
         Return ID.ToString()
      End Get
   End Property

   Private aLastName As String
   Public Property LastName() As String
      Get
         Return aLastName
      End Get
      Set
         aLastName = value
      End Set
   End Property

   Private aFirstName As String
   Public Property FirstName() As String
      Get
         Return aFirstName
      End Get
      Set
         aFirstName = value
      End Set
   End Property

   Public ReadOnly Property FullName() As String
      Get
         Return FirstName & " " & LastName
      End Get
   End Property

   Private aTitle As String
   Public Property Title() As String
      Get
         Return aTitle
      End Get
      Set
         aTitle = value
      End Set
   End Property

   Private titleOfCourtesy As String
   Public Property Courtesy() As String
      Get
         Return titleOfCourtesy
      End Get
      Set
         titleOfCourtesy = value
      End Set
   End Property

   Private reportsTo As Integer
   Public Property Supervisor() As Integer
      Get
         Return reportsTo
      End Get
      Set
         reportsTo = value
      End Set
   End Property

   Public Function Save() As Boolean

      ' Implement persistence logic.
      Return True

   End Function 'Save


   Public Function Delete() As Boolean

     ' Implement delete logic.
     Return True

   End Function 'Delete
End Class


Friend Class NorthwindDataException
   Inherits Exception

   Public Sub New(msg As String)
      MyBase.New(msg)
   End Sub
End Class

End Namespace

Opmerkingen

Het bedrijfsobject wordt ervan uitgegaan dat gegevens één record tegelijk worden ingevoegd in plaats van in een batch.

De InsertMethod eigenschap wordt gedelegeerd aan de InsertMethod eigenschap van het ObjectDataSourceView object dat is gekoppeld aan het ObjectDataSource object.

Levensduur van object

De methode die wordt geïdentificeerd door de eigenschap InsertMethod kan een instantiemethode of een methode static (Shared in Visual Basic) zijn. Als het een instantiemethode is, wordt het bedrijfsobject gemaakt en vernietigd telkens wanneer de methode die is opgegeven door de InsertMethod eigenschap wordt aangeroepen. U kunt de ObjectCreated en ObjectCreating gebeurtenissen afhandelen om met het bedrijfsobject te werken voordat de InsertMethod eigenschap wordt aangeroepen. U kunt ook de ObjectDisposing gebeurtenis afhandelen die wordt gegenereerd nadat de methode die is opgegeven door de DeleteMethod eigenschap wordt aangeroepen. Als het bedrijfsobject de IDisposable interface implementeert, wordt de Dispose methode aangeroepen voordat het object wordt vernietigd. Als de methode is static (Shared in Visual Basic), wordt het bedrijfsobject nooit gemaakt en kunt u de gebeurtenissen ObjectCreated, ObjectCreating en ObjectDisposing niet verwerken.

Parameter samenvoegen

Parameters worden vanuit drie bronnen toegevoegd aan de InsertParameters verzameling:

  • Vanuit het gegevensgebonden besturingselement, tijdens runtime.

  • Van het InsertParameters element, declaratief.

  • Programmatisch vanuit de Inserting methode.

Eerst worden parameters die worden gegenereerd op basis van gegevensgebonden besturingselementen toegevoegd aan de InsertParameters verzameling. Als het ObjectDataSource besturingselement bijvoorbeeld is gebonden aan een GridView besturingselement met de kolommen Name en Number, worden de parameters voor Name en Number toegevoegd aan de verzameling. Het gegevenstype van deze parameters is string. Vervolgens worden de parameters die in het InsertParameters element worden vermeld, toegevoegd. Als een parameter in het InsertParameters element wordt gevonden met dezelfde naam als een parameter die zich al in de InsertParameters verzameling bevindt, wordt de bestaande parameter gewijzigd zodat deze overeenkomt met de parameter die is opgegeven in het InsertParameters element. Dit wordt meestal gebruikt om het type gegevens in de parameter te wijzigen. Ten slotte kunt u programmatisch parameters toevoegen en verwijderen in de Inserting gebeurtenis, die plaatsvinden voordat de Insert methode wordt uitgevoerd. De methode wordt opgelost nadat de parameters zijn samengevoegd. Methodeomzetting wordt in de volgende sectie besproken.

Important

U moet een parameterwaarde valideren die u van de client ontvangt. De runtime vervangt simpelweg de parameterwaarde in de InsertMethod eigenschap.

Methodeomzetting

Wanneer de Insert methode wordt aangeroepen, worden de gegevensvelden van het besturingselement voor gegevens, de parameters die declaratief in het InsertParameters element zijn gemaakt en de parameters die in de Inserting gebeurtenis-handler zijn toegevoegd, allemaal samengevoegd. (Zie de voorgaande sectie voor meer informatie.) Het ObjectDataSource object probeert vervolgens een methode te vinden die moet worden aangeroepen. Eerst wordt gezocht naar een of meer methoden met de naam die is opgegeven in de InsertMethod eigenschap. Als er geen overeenkomst wordt gevonden, wordt er een InvalidOperationException uitzondering gegenereerd. Als er een overeenkomst wordt gevonden, zoekt deze naar overeenkomende parameternamen. Stel dat een type dat door de eigenschap is opgegeven, twee methoden heeft met de TypeName naam InsertARecord. De InsertARecord ene heeft één parameter, IDen de andere InsertARecord heeft twee parameters, Name en Number. Als de InsertParameters verzameling slechts één parameter heeft met de naam ID, wordt de InsertARecord methode met alleen de ID parameter aangeroepen. Het type van de parameter wordt niet gecontroleerd bij het omzetten van de methoden. De volgorde van de parameters maakt niet uit.

Als de DataObjectTypeName eigenschap is ingesteld, wordt de methode op een andere manier omgezet. Er ObjectDataSource wordt gezocht naar een methode met de naam die is opgegeven in de InsertMethod eigenschap die één parameter gebruikt van het type dat is opgegeven in de DataObjectTypeName eigenschap. In dit geval maakt de naam van de parameter niet uit.

Van toepassing op

Zie ook