SqlDataSource ile Veri Ekleme, Güncelleştirme ve Silme (VB)Inserting, Updating, and Deleting Data with the SqlDataSource (VB)

Scott Mitchell tarafındanby Scott Mitchell

Örnek uygulamayı indirin veya PDF 'yi indirinDownload Sample App or Download PDF

Önceki öğreticilerde, ObjectDataSource denetiminin verileri ekleme, güncelleştirme ve silme için nasıl izin verileceğini öğrendik.In previous tutorials we learned how the ObjectDataSource control allowed for inserting, updating, and deleting of data. SqlDataSource denetimi aynı işlemleri destekler, ancak yaklaşım farklıdır ve bu öğretici, SqlDataSource 'un verileri eklemek, güncelleştirmek ve silmek için nasıl yapılandırılacağını gösterir.The SqlDataSource control supports the same operations, but the approach is different, and this tutorial shows how to configure the SqlDataSource to insert, update, and delete data.

GirişIntroduction

Ekleme, güncelleştirme ve silme konusunda genel bir bakışIçin, GridView denetimi yerleşik güncelleştirme ve silme özellikleri sağlarken, DetailsView ve FormView denetimleri, işlevselliği düzenlemenin ve silmenin yanı sıra destek ekleme olanağı içerir.As discussed in An Overview of Inserting, Updating, and Deleting, the GridView control provides built-in updating and deleting capabilities, while the DetailsView and FormView controls include inserting support along with editing and deleting functionality. Bu veri değiştirme özellikleri, bir kod satırı yazılması gerekmeden doğrudan bir veri kaynağı denetimine takılabilir.These data modification capabilities can be plugged directly into a data source control without a line of code needing to be written. GridView, DetailsView ve FormView denetimleriyle ekleme, güncelleştirme ve silme işlemlerini kolaylaştırmak için ObjectDataSource kullanılarak incelenen , güncelleştirmeye ve silmeye genel bakış .An Overview of Inserting, Updating, and Deleting examined using the ObjectDataSource to facilitate inserting, updating, and deleting with the GridView, DetailsView, and FormView controls. Alternatif olarak, SqlDataSource, ObjectDataSource yerine kullanılabilir.Alternatively, the SqlDataSource can be used in place of the ObjectDataSource.

INSERT, Update veya delete eylemini gerçekleştirmek için çağrılacak nesne katmanı yöntemlerini belirtmemiz gereken ObjectDataSource ile ekleme, güncelleştirme ve silme işlemini desteklemeyi sağlayan bu işlemi geri çekin.Recall that to support inserting, updating, and deleting, with the ObjectDataSource we needed to specify the object layer methods to invoke to perform the insert, update, or delete action. SqlDataSource ile yürütmek için INSERT, UPDATEve DELETE SQL deyimleri (veya saklı yordamlar) sağlamamız gerekir.With the SqlDataSource, we need to provide INSERT, UPDATE, and DELETE SQL statements (or stored procedures) to execute. Bu öğreticide göreceğiniz gibi, bu deyimler el ile oluşturulabilir veya SqlDataSource s veri kaynağı Yapılandırma Sihirbazı tarafından otomatik olarak oluşturulabilir.As we'll see in this tutorial, these statements can be created manually or can be automatically generated by the SqlDataSource s Configure Data Source wizard.

Note

GridView, DetailsView ve FormView denetimlerinin ekleme, düzenlemesi ve silme yeteneklerini zaten tartıştığımız için, bu öğretici bu işlemleri desteklemek için SqlDataSource denetimini yapılandırmaya odaklanacaktır.Since we ve already discussed the inserting, editing, and deleting capabilities of the GridView, DetailsView, and FormView controls, this tutorial will focus on configuring the SqlDataSource control to support these operations. Bu özellikleri GridView, DetailsView ve FormView içinde uygulamaya yönelik olarak, ekleme, güncelleştirme ve silme konusunda genel bir bakışIle başlayan veri öğreticilerini düzenlemenin, eklemenin ve silmenin üzerine dönebilmeniz gerekir.If you need to brush up on implementing these features within the GridView, DetailsView, and FormView, return to the Editing, Inserting, and Deleting Data tutorials, starting with An Overview of Inserting, Updating, and Deleting.

1. Adım:INSERT,UPDATEveDELETEdeyimlerini belirtmeStep 1: SpecifyingINSERT,UPDATE, andDELETEStatements

Son iki öğreticilerde gördüğünüz gibi, bir SqlDataSource denetiminden veri almak için iki özellik ayarlamanız gerekir:As we ve seen in the past two tutorials, to retrieve data from a SqlDataSource control we need to set two properties:

  1. ConnectionString, sorgunun hangi veritabanına gönderileceğini belirtir veConnectionString, which specifies what database to send the query to, and
  2. SelectCommand, sonuçları döndürmek için yürütülecek olan geçici SQL ifadesini veya saklı yordam adını belirten.SelectCommand, which specifies the ad-hoc SQL statement or stored procedure name to execute to return the results.

Parametreleri olan SelectCommand değerler için, parametre değerleri SqlDataSource s SelectParameters koleksiyonu aracılığıyla belirtilir ve sabit kodlanmış değerler, ortak parametre kaynak değerleri (QueryString alanları, oturum değişkenleri, Web denetim değerleri vb.) içerebilir veya program aracılığıyla atanabilir.For SelectCommand values with parameters, the parameter values are specified via the SqlDataSource s SelectParameters collection and can include hard-coded values, common parameter source values (querystring fields, session variables, Web control values, and so on), or can be programmatically assigned. SqlDataSource Control s Select() yöntemi programlı olarak veya bir veri Web denetiminden otomatik olarak çağrıldığında, veritabanına bir bağlantı oluşturulur, parametre değerleri sorguya atanır ve komut veritabanına shuttled kapalıdır.When the SqlDataSource control s Select() method is invoked either programmatically or automatically from a data Web control a connection to the database is established, the parameter values are assigned to the query, and the command is shuttled off to the database. Sonuçlar, denetim s DataSourceMode özelliğinin değerine bağlı olarak veri kümesi veya DataReader olarak döndürülür.The results are then returned as either a DataSet or DataReader, depending on the value of the control s DataSourceMode property.

Veri seçme ile birlikte, SqlDataSource denetimi INSERT, UPDATEve DELETE SQL deyimlerini çok aynı şekilde sağlayarak veri eklemek, güncelleştirmek ve silmek için kullanılabilir.Along with selecting data, the SqlDataSource control can be used to insert, update, and delete data by supplying INSERT, UPDATE, and DELETE SQL statements in much the same way. Yürütülecek INSERT, UPDATEve DELETE SQL deyimlerinin InsertCommand, UpdateCommandve DeleteCommand özelliklerini atamanız yeterlidir.Simply assign the InsertCommand, UpdateCommand, and DeleteCommand properties the INSERT, UPDATE, and DELETE SQL statements to execute. Deyimlerde parametreler varsa (Bunlar her zaman için), bunları InsertParameters, UpdateParametersve DeleteParameters koleksiyonlara dahil edin.If the statements have parameters (as they most always will), include them in the InsertParameters, UpdateParameters, and DeleteParameters collections.

Bir InsertCommand, UpdateCommandveya DeleteCommand değeri belirtilmişse, ilgili veri Web denetimi s akıllı etiketinde ekleme, yeniden Düzenle veya silmeyi etkinleştir seçeneğinin kullanılabilmesi için kullanılabilir hale gelir.Once an InsertCommand, UpdateCommand, or DeleteCommand value has been specified, the Enable Inserting, Enable Editing, or Enable Deleting option in the corresponding data Web control s smart tag will become available. Bunu göstermek için, SqlDataSource denetim öğreticisi Ile sorgulama verilerinde oluşturduğumuz Querying.aspx sayfasından bir örnek alalım ve bunu silme yeteneklerini içerecek şekilde geliştirdik.To illustrate this, let s take an example from the Querying.aspx page we created in the Querying Data with the SqlDataSource Control tutorial and augment it to include delete capabilities.

InsertUpdateDelete.aspx ve Querying.aspx sayfalarını SqlDataSource klasöründen açarak başlayın.Start by opening the InsertUpdateDelete.aspx and Querying.aspx pages from the SqlDataSource folder. Tasarımcı Querying.aspx sayfasında, ilk örnekteki SqlDataSource ve GridView ' i (ProductsDataSource ve GridView1 denetimleri) seçin.From the Designer on the Querying.aspx page, select the SqlDataSource and GridView from the first example (the ProductsDataSource and GridView1 controls). İki denetimi seçtikten sonra, Düzen menüsüne gidin ve Kopyala ' yı seçin (veya yalnızca CTRL + C ' ye basın).After selecting the two controls, go to the Edit menu and choose Copy (or just hit Ctrl+C). Sonra, InsertUpdateDelete.aspx tasarımcısına gidin ve denetimlere yapıştırın.Next, go to the Designer of InsertUpdateDelete.aspx and paste in the controls. İki denetimi InsertUpdateDelete.aspxüzerine taşıdıktan sonra, sayfayı bir tarayıcıda test edin.After you have moved the two controls over to InsertUpdateDelete.aspx, test out the page in a browser. Products veritabanı tablosundaki tüm kayıtlar için ProductID, ProductNameve UnitPrice sütunlarının değerlerini görmeniz gerekir.You should see the values of the ProductID, ProductName, and UnitPrice columns for all of the records in the Products database table.

Tüm ürünlerin , ProductID tarafından sıralanan şekilde listelenmiştirAll of the Products are Listed, Ordered by ProductID

Şekil 1: tüm ürünler ProductID göre sıralanmıştır (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 1: All of the Products are Listed, Ordered by ProductID (Click to view full-size image)

SqlDataSource sDeleteCommandveDeleteParametersözellikleri ekleniyorAdding the SqlDataSource sDeleteCommandandDeleteParametersProperties

Bu noktada, tek yapmanız gereken Products tablosundan tüm kayıtları döndüren bir SqlDataSource ve bu verileri işleyen bir GridView sunuyoruz.At this point we have a SqlDataSource that simply returns all of the records from the Products table and a GridView that renders this data. Amacınız, kullanıcının GridView aracılığıyla ürünleri silmesine izin vermek için bu örneği genişletmektir.Our goal is to extend this example to allow for the user to delete products via the GridView. Bunu gerçekleştirmek için, SqlDataSource Control s DeleteCommand ve DeleteParameters özelliklerinin değerlerini belirtmemiz ve sonra GridView 'ı silmeyi destekleyecek şekilde yapılandırmanız gerekir.To accomplish this we need to specify values for the SqlDataSource control s DeleteCommand and DeleteParameters properties and then configure the GridView to support deleting.

DeleteCommand ve DeleteParameters özellikleri çeşitli yollarla belirtilebilir:The DeleteCommand and DeleteParameters properties can be specified in a number of ways:

  • Bildirim temelli söz dizimiThrough the declarative syntax
  • Tasarımcıda Özellikler penceresiFrom the Properties window in the Designer
  • Veri kaynağını yapılandırma Sihirbazı ' nda özel bir SQL ifadesini veya saklı yordam belirleme ekranını seçinFrom the Specify a custom SQL statement or stored procedure screen in the Configure Data Source wizard
  • Veri kaynağını yapılandırma Sihirbazı ' nda bulunan görünüm tablosundan sütunları belirt ' in Gelişmiş düğmesi aracılığıyla, DeleteCommand ve DeleteParameters özelliklerde kullanılan DELETE SQL deyiminden ve parametre koleksiyonuna otomatik olarak otomatik olarak oluşturacakVia the Advanced button in the Specify columns from a table of view screen in the Configure Data Source wizard, which will actually automatically generate the DELETE SQL statement and parameter collection used in the DeleteCommand and DeleteParameters properties

Adım 2 ' de DELETE deyimin otomatik olarak nasıl oluşturulduğunu inceleyeceğiz.We'll examine how to automatically have the DELETE statement created in Step 2. Şimdilik, veri kaynağı Yapılandırma Sihirbazı ya da bildirime dayalı sözdizimi seçeneği de yalnızca aynı zamanda çalışabilse de tasarımcı 'daki Özellikler penceresi kullanalım.For now, let s use the Properties window in the Designer, although the Configure Data Source wizard or declarative syntax option would work just as well.

InsertUpdateDelete.aspxtasarımcıda ProductsDataSource SqlDataSource ' a tıklayın ve ardından Özellikler penceresi ' ı (Görünüm menüsünden Özellikler penceresi ' i seçin veya yalnızca F4 ' e basın).From the Designer in InsertUpdateDelete.aspx, click on the ProductsDataSource SqlDataSource and then bring up the Properties window (from the View menu, choose Properties window, or simply hit F4). Bir üç nokta kümesini getirecek olan DeleteQuery özelliğini seçin.Select the DeleteQuery property, which will bring up a set of ellipses.

Özellikler penceresinden DeleteQuery özelliğini seçin

Şekil 2: Özellikler penceresinden DeleteQuery özelliğini seçinFigure 2: Select the DeleteQuery Property from the Properties Window

Note

SqlDataSource bir DeleteQuery özelliğine sahip değildir.The SqlDataSource doesn t have a DeleteQuery property. Bunun yerine, DeleteQuery DeleteCommand ve DeleteParameters özelliklerinin bir birleşimidir ve yalnızca pencere tasarımcı aracılığıyla görüntülenirken Özellikler penceresi listelenmiştir.Rather, DeleteQuery is a combination of the DeleteCommand and DeleteParameters properties and is only listed in the Properties window when viewing the window through the Designer. Kaynak görünümündeki Özellikler penceresi bakıyorsanız, bunun yerine DeleteCommand özelliğini bulacaksınız.If you are looking at the Properties window in the Source view, you'll find the DeleteCommand property instead.

DeleteQuery özelliğindeki üç nokta işaretine tıklayarak komut ve parametre Düzenleyicisi iletişim kutusunu açın (bkz. Şekil 3).Click the ellipses in the DeleteQuery property to bring up the Command and Parameter Editor dialog box (see Figure 3). Bu iletişim kutusunda DELETE SQL ifadesini belirtebilir ve parametreleri belirtebilirsiniz.From this dialog box you can specify the DELETE SQL statement and specify the parameters. DELETE komut metin kutusuna aşağıdaki sorguyu girin (isterseniz el ile veya Sorgu Tasarımcısı kullanarak):Enter the following query into the DELETE command textbox (either manually or using the Query Builder, if you prefer):

DELETE FROM Products
WHERE ProductID = @ProductID

Ardından, aşağıdaki parametre listesine @ProductID parametresini eklemek için parametreleri Yenile düğmesine tıklayın.Next, click the Refresh Parameters button to add the @ProductID parameter to the list of parameters below.

Özellikler penceresinden DeleteQuery özelliğini seçinSelect the DeleteQuery Property from the Properties Window

Şekil 3: Özellikler penceresinden DeleteQuery özelliğini seçin (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 3: Select the DeleteQuery Property from the Properties Window (Click to view full-size image)

Bu parametre için bir değer sağlamadığınızda (parametre kaynağını yok olarak bırakın).Do not provide a value for this parameter (leave its Parameter source at None ). GridView 'a silme desteğini eklediğimiz bir kez, GridView bu parametre değerini, Sil düğmesine tıklanmış olan satır için DataKeys koleksiyonunun değerini kullanarak otomatik olarak sağlayacaktır.Once we add deleting support to the GridView, the GridView will automatically supply this parameter value, using the value of its DataKeys collection for the row whose Delete button was clicked.

Note

DELETE sorgusunda kullanılan parametre adı, GridView, DetailsView veya FormView içindeki DataKeyNames değerinin adı ile aynı olmalıdır .The parameter name used in the DELETE query must be the same as the name of the DataKeyNames value in the GridView, DetailsView, or FormView. Diğer bir deyişle, DELETE deyimindeki parametresi, Products tablosundaki birincil anahtar sütun adı (ve bu nedenle GridView 'daki DataKeyNames değeri) ProductIDolduğundan, @ProductID (yani, deyin, @ID) olarak adlandırılır.That is, the parameter in the DELETE statement is purposefully named @ProductID (instead of, say, @ID), because the primary key column name in the Products table (and therefore the DataKeyNames value in the GridView) is ProductID.

Parametre adı ve DataKeyNames değeri eşleşmiyorsa GridView, değeri otomatik olarak DataKeys koleksiyonundan atayamaz.If the parameter name and DataKeyNames value doesn t match, the GridView cannot automatically assign the parameter the value from the DataKeys collection.

Silme ile ilgili bilgileri komut ve parametre Düzenleyicisi iletişim kutusuna girdikten sonra, ortaya çıkan bildirim işaretlemesini incelemek için Tamam ' a tıklayın ve kaynak görünümüne gidin:After entering the delete-related information into the Command and Parameter Editor dialog box click OK and go to the Source view to examine the resulting declarative markup:

<asp:SqlDataSource ID="ProductsDataSource" runat="server"
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
    SelectCommand=
        "SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]"
    DeleteCommand="DELETE FROM Products WHERE ProductID = @ProductID">
    <DeleteParameters>
        <asp:Parameter Name="ProductID" />
    </DeleteParameters>
</asp:SqlDataSource>

DeleteCommand özelliğinin yanı sıra <DeleteParameters> bölümünü ve productIDadlı parametre nesnesini de bir yere göz önünde.Note the addition of the DeleteCommand property as well as the <DeleteParameters> section and the Parameter object named productID.

GridView 'ı silmek için yapılandırmaConfiguring the GridView for Deleting

DeleteCommand özelliği eklendiğinde, GridView s akıllı etiketi şimdi silmeyi etkinleştir seçeneğini içerir.With the DeleteCommand property added, the GridView s smart tag now contains the Enable Deleting option. Devam edin ve bu onay kutusunu işaretleyin.Go ahead and check this checkbox. Ekleme, güncelleştirme ve silme konusunda bir genel bakıştaaçıklandığı gibi, GridView 'un ShowDeleteButton özelliği Trueolarak ayarlanmış bir CommandField eklemesine neden olur.As discussed in An Overview of Inserting, Updating, and Deleting, this causes the GridView to add a CommandField with its ShowDeleteButton property set to True. Şekil 4 ' te gösterildiği gibi, sayfa bir tarayıcı ile ziyaret edildiğinde silme düğmesi de bulunur.As Figure 4 shows, when the page is visited through a browser a Delete button is included. Bazı ürünleri silerek bu sayfayı test edin.Test this page out by deleting some products.

Her GridView satırı şimdi bir Sil düğmesi IçerirEach GridView Row Now Includes a Delete Button

Şekil 4: her GridView satırı artık Sil düğmesini içerir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 4: Each GridView Row Now Includes a Delete Button (Click to view full-size image)

Bir Delete düğmesine tıklandıktan sonra, GridView, ProductID parametresini, DELETE düğmesine tıklanan satıra ait DataKeys Collection değerinin değerine atar ve SqlDataSource s Delete() yöntemini çağırır.Upon clicking a Delete button, a postback occurs, the GridView assigns the ProductID parameter the value of the DataKeys collection value for the row whose Delete button was clicked, and invokes the SqlDataSource s Delete() method. Ardından SqlDataSource denetimi veritabanına bağlanır ve DELETE ifadesini yürütür.The SqlDataSource control then connects to the database and executes the DELETE statement. GridView daha sonra SqlDataSource 'a yeniden bağlanır, geri dönüp geçerli ürün kümesini (artık tam silinen kaydı içermez) görüntüler.The GridView then rebinds to the SqlDataSource, getting back and displaying the current set of products (which no longer includes the just-deleted record).

Note

GridView, SqlDataSource parametrelerini doldurmak için DataKeys koleksiyonunu kullandığından, GridView s DataKeyNames özelliğinin birincil anahtarı oluşturan ve SqlDataSource s SelectCommand bu sütunları döndürdüğünden emin olun.Since the GridView uses its DataKeys collection to populate the SqlDataSource parameters, it s vital that the GridView s DataKeyNames property be set to the column(s) that constitute the primary key and that the SqlDataSource s SelectCommand returns these columns. Üstelik, SqlDataSource s DeleteCommand parametre adının @ProductIDolarak ayarlanması önemlidir.Moreover, it s important that the parameter name in the SqlDataSource s DeleteCommand is set to @ProductID. DataKeyNames özelliği ayarlanmamışsa veya parametre @ProductsIDadlandırılmadıysa, Sil düğmesine tıklamak geri göndermeye neden olur, ancak hiçbir kaydı aslında silmez.If the DataKeyNames property is not set or the parameter is not named @ProductsID, clicking the Delete button will cause a postback, but won't actually delete any record.

Şekil 5 ' te bu etkileşim grafiksel olarak gösterilmiştir.Figure 5 depicts this interaction graphically. Veri Web denetiminden ekleme, güncelleştirme ve silme ile ilişkili olayların zinciri hakkında daha ayrıntılı bir tartışma için ekleme, güncelleştirme ve silme öğreticisi Ile Ilişkili olayları İnceleme bölümüne geri bakın.Refer back to the Examining the Events Associated with Inserting, Updating, and Deleting tutorial for a more detailed discussion on the chain of events associated with inserting, updating, and deleting from a data Web control.

GridView 'daki Sil düğmesine tıkladığınızda SqlDataSource s Delete () yöntemi çağırılır

Şekil 5: GridView 'Da Sil düğmesine tıkladığınızda SqlDataSource s Delete() yöntemi çağırılırFigure 5: Clicking the Delete Button in the GridView Invokes the SqlDataSource s Delete() Method

2. Adım:INSERT,UPDATEveDELETEdeyimlerini otomatik olarak oluşturmaStep 2: Automatically Generating theINSERT,UPDATE, andDELETEStatements

1. adım incelendi INSERT, UPDATEve DELETE SQL deyimleri Özellikler penceresi veya denetim tarafından bildirime dayalı sözdizimi aracılığıyla belirtilebilir.As Step 1 examined, INSERT, UPDATE, and DELETE SQL statements can be specified through the Properties window or the control s declarative syntax. Ancak, bu yaklaşım tek başına SQL deyimlerini el ile yazmanızı gerektirir ve bu, monotous ve hata durumunda olabilir.However, this approach requires that we manually write out the SQL statements by hand, which can be monotonous and error-prone. Neyse ki, veri kaynağı Yapılandırma Sihirbazı, görünüm ekranından sütunları belirt ' i kullanırken INSERT, UPDATEve DELETE deyimlerinin otomatik olarak oluşturulmasını sağlayan bir seçenek sunar.Fortunately, the Configure Data Source wizard provides an option to have the INSERT, UPDATE, and DELETE statements automatically generated when using the Specify columns from a table of view screen.

Bu otomatik oluşturma seçeneğini keşfedelim.Let s explore this automatic generation option. InsertUpdateDelete.aspx tasarımcı 'ya bir DetailsView ekleyin ve ID özelliğini ManageProductsolarak ayarlayın.Add a DetailsView to the Designer in InsertUpdateDelete.aspx and set its ID property to ManageProducts. Ardından, DetailsView 'un akıllı etiketinde yeni bir veri kaynağı oluşturmayı ve ManageProductsDataSourceadlı bir SqlDataSource oluşturmayı seçin.Next, from the DetailsView s smart tag, choose to create a new data source and create a SqlDataSource named ManageProductsDataSource.

ManageProductsDataSource adlı yeni bir SqlDataSource oluşturmaCreate a New SqlDataSource Named ManageProductsDataSource

Şekil 6: ManageProductsDataSource adlı yeni bir SqlDataSource oluşturun (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 6: Create a New SqlDataSource Named ManageProductsDataSource (Click to view full-size image)

Veri kaynağı Yapılandırma Sihirbazı ' ndan NORTHWINDConnectionString bağlantı dizesini kullanmayı ve Ileri ' yi tıklatın.From the Configure Data Source wizard, opt to use the NORTHWINDConnectionString connection string and click Next. Select Ifadesini Yapılandır ekranında, bir tablodaki sütunları belirt veya görünümü görüntüle radyo düğmesini seçili bırakın ve açılan listeden Products tablosunu seçin.From the Configure the Select Statement screen, leave the Specify columns from a table or view radio button selected and pick the Products table from the drop-down list. Onay kutusu listesinden ProductID, ProductName, UnitPriceve Discontinued sütunları seçin.Select the ProductID, ProductName, UnitPrice, and Discontinued columns from the checkbox list.

Ürünler tablosunu kullanarak ProductID, ProductName, UnitPrice ve Discontinued sütunlarını döndürünUsing the Products Table, Return the ProductID, ProductName, UnitPrice, and Discontinued Columns

Şekil 7: Products tablosunu kullanarak ProductID, ProductName, UnitPriceve Discontinued sütunları döndürün (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 7: Using the Products Table, Return the ProductID, ProductName, UnitPrice, and Discontinued Columns (Click to view full-size image)

Seçilen tablo ve sütunlara göre otomatik olarak INSERT, UPDATEve DELETE deyimlerini oluşturmak için Gelişmiş düğmesine tıklayın ve INSERT, UPDATEve DELETE deyimlerini oluştur onay kutusunu işaretleyin.To automatically generate INSERT, UPDATE, and DELETE statements based on the selected table and columns, click the Advanced button and check the Generate INSERT, UPDATE, and DELETE statements checkbox.

INSERT, UPDATE ve DELETE deyimlerini oluştur onay kutusunu işaretleyin

Şekil 8: oluşturma INSERT, UPDATEve DELETE deyimlerini denetle onay kutusuFigure 8: Check the Generate INSERT, UPDATE, and DELETE statements Checkbox

INSERT, UPDATEve DELETE deyimlerini oluştur onay kutusu yalnızca seçili tabloda bir birincil anahtar varsa ve döndürülen sütunlar listesine birincil anahtar sütunu (veya sütunları) dahil edildiğinde kullanıma sunulacaktır.The Generate INSERT, UPDATE, and DELETE statements checkbox will only be checkable if the table selected has a primary key and the primary key column (or columns) are included in the list of returned columns. INSERToluştur, UPDATEve DELETE deyimler onay kutusu işaretlendikten sonra seçilebilir hale gelen iyimser eşzamanlılık kullan onay kutusunu, iyimser eşzamanlılık denetimi sağlamak için ortaya çıkan UPDATE ve DELETE deyimlerdeki WHERE yan tümceleri daha iyi hale gelir.The Use optimistic concurrency checkbox, which becomes selectable once the Generate INSERT, UPDATE, and DELETE statements checkbox has been checked, will augment the WHERE clauses in the resulting UPDATE and DELETE statements to provide optimistic concurrency control. Şimdilik bu onay kutusunu işaretlenmemiş olarak bırakın; sonraki öğreticide SqlDataSource denetimiyle iyimser eşzamanlılığı inceleyeceğiz.For now, leave this checkbox unchecked; we'll examine optimistic concurrency with the SqlDataSource control in the next tutorial.

INSERT, UPDATEve DELETE deyimlerini oluştur onay kutusunu işaretledikten sonra Tamam ' a tıklayarak, SELECT deyimini Yapılandır ekranına dönün, ardından Ileri ' ye tıklayın ve ardından son ' a tıklayarak veri kaynağı Yapılandırma Sihirbazı ' nı doldurun.After checking the Generate INSERT, UPDATE, and DELETE statements checkbox, click OK to return to the Configure Select Statement screen, then click Next, and then Finish, to complete the Configure Data Source wizard. Sihirbaz tamamlandıktan sonra Visual Studio, ProductID, ProductNameve UnitPrice sütunları ve Discontinued sütunu için bir CheckBoxField için DetailsView 'a BoundFields ekler.Upon completing the wizard, Visual Studio will add BoundFields to the DetailsView for the ProductID, ProductName, and UnitPrice columns and a CheckBoxField for the Discontinued column. DetailsView 'un akıllı etiketinde, bu sayfayı ziyaret eden kullanıcının ürünlerin içinden ilerleyebilmesi için sayfalama etkinleştir seçeneğini işaretleyin.From the DetailsView s smart tag, check the Enable Paging option so that the user visiting this page can step through the products. Ayrıca DetailsView s Width ve Height özelliklerini de temizleyin.Also clear out the DetailsView s Width and Height properties.

Akıllı etiketin eklemeyi etkinleştir, Düzenle etkinleştir ve mevcut silme seçeneklerini etkinleştir seçeneklerini görürsünüz.Notice that the smart tag has the Enable Inserting, Enable Editing, and Enable Deleting options available. Bunun nedeni, SqlDataSource InsertCommand, UpdateCommandve DeleteCommandiçin değerler içereceğinden aşağıdaki bildirime dayalı sözdizimidir:This is because the SqlDataSource contains values for its InsertCommand, UpdateCommand, and DeleteCommand, as the following declarative syntax shows:

<asp:DetailsView ID="ManageProducts" runat="server" AllowPaging="True"
    AutoGenerateRows="False" DataKeyNames="ProductID"
    DataSourceID="ManageProductsDataSource" EnableViewState="False">
    <Fields>
        <asp:BoundField DataField="ProductID" HeaderText="ProductID"
            InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
        <asp:BoundField DataField="ProductName" HeaderText="ProductName"
            SortExpression="ProductName" />
        <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice"
            SortExpression="UnitPrice" />
        <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
            SortExpression="Discontinued" />
    </Fields>
</asp:DetailsView>
<asp:SqlDataSource ID="ManageProductsDataSource" runat="server"
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
    DeleteCommand=
        "DELETE FROM [Products] WHERE [ProductID] = @ProductID"
    InsertCommand=
        "INSERT INTO [Products] ([ProductName], [UnitPrice], [Discontinued])
         VALUES (@ProductName, @UnitPrice, @Discontinued)"
    SelectCommand=
        "SELECT [ProductID], [ProductName], [UnitPrice], [Discontinued]
         FROM [Products]"
    UpdateCommand=
        "UPDATE [Products] SET [ProductName] = @ProductName,
         [UnitPrice] = @UnitPrice, [Discontinued] = @Discontinued
         WHERE [ProductID] = @ProductID">
    <DeleteParameters>
        <asp:Parameter Name="ProductID" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="ProductName" Type="String" />
        <asp:Parameter Name="UnitPrice" Type="Decimal" />
        <asp:Parameter Name="Discontinued" Type="Boolean" />
        <asp:Parameter Name="ProductID" Type="Int32" />
    </UpdateParameters>
    <InsertParameters>
        <asp:Parameter Name="ProductName" Type="String" />
        <asp:Parameter Name="UnitPrice" Type="Decimal" />
        <asp:Parameter Name="Discontinued" Type="Boolean" />
    </InsertParameters>
</asp:SqlDataSource>

SqlDataSource denetiminin InsertCommand, UpdateCommandve DeleteCommand özellikleri için değerleri otomatik olarak nasıl ayarlandığını aklınızda edin.Note how the SqlDataSource control has had values automatically set for its InsertCommand, UpdateCommand, and DeleteCommand properties. InsertCommand ve UpdateCommand özelliklerinde başvurulan sütun kümesi SELECT deyimindekilerle dayanır.The set of columns referenced in the InsertCommand and UpdateCommand properties are based on those in the SELECT statement. Diğer bir deyişle, InsertCommand ve UpdateCommandher ürün sütununa sahip olmak yerine, yalnızca SelectCommand belirtilen sütunlar vardır (daha az ProductIDve IDENTITYbu, düzenleme sırasında değeri değiştirilemez ve eklendiğinde otomatik olarak atanır).That is, rather than having every Products column in the InsertCommand and UpdateCommand, there are only those columns specified in the SelectCommand (less ProductID, which is omitted because it s an IDENTITY column, whose value cannot be changed when edited and which is automatically assigned when inserting). Ayrıca, InsertCommand, UpdateCommandve DeleteCommand özelliklerindeki her bir parametre için InsertParameters, UpdateParametersve DeleteParameters koleksiyonlarında karşılık gelen parametreler vardır.Moreover, for each parameter in the InsertCommand, UpdateCommand, and DeleteCommand properties there are corresponding parameters in the InsertParameters, UpdateParameters, and DeleteParameters collections.

DetailsView 'un veri değiştirme özelliklerini açmak için, akıllı etiketinde ekleme, Düzenle ve silmeyi etkinleştir seçeneklerini işaretleyin.To turn on the DetailsView s data modification features, check the Enable Inserting, Enable Editing, and Enable Deleting options in its smart tag. Bu, ShowInsertButton, ShowEditButtonve ShowDeleteButton özellikleri Trueolarak ayarlanmış bir CommandField ekler.This adds a CommandField with its ShowInsertButton, ShowEditButton, and ShowDeleteButton properties set to True.

Tarayıcıdaki sayfayı ziyaret edin ve DetailsView 'a eklenen düzenleme, silme ve yeni düğmeleri aklınızda bulunur.Visit the page in a browser and note the Edit, Delete, and New buttons included in the DetailsView. Düzenle düğmesine tıkladığınızda, DetailsView, ReadOnly özelliği bir TextBox olarak False (varsayılan) ve CheckBoxField olarak bir CheckBox olarak ayarlanmış olan her bir BoundField görüntüleyen düzenleme moduna geçer.Clicking the Edit button turns the DetailsView into edit mode, which displays each BoundField whose ReadOnly property is set to False (the default) as a TextBox, and the CheckBoxField as a checkbox.

DetailsView 'un varsayılan Düzenle arabirimini The DetailsView s Default Editing Interface

Şekil 9: DetailsView 'un varsayılan düzenlenme arabirimi (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 9: The DetailsView s Default Editing Interface (Click to view full-size image)

Benzer şekilde, seçili olan ürünü silebilir veya sisteme yeni bir ürün ekleyebilirsiniz.Similarly, you can delete the currently selected product or add a new product to the system. InsertCommand deyimleri yalnızca ProductName, UnitPriceve Discontinued sütunları ile çalıştığından, diğer sütunlarda, ekleme sırasında veritabanı tarafından atanan NULL veya varsayılan değerleri vardır.Since the InsertCommand statement only works with the ProductName, UnitPrice, and Discontinued columns, the other columns have either NULL or their default value assigned by the database upon insert. ObjectDataSource ile tıpkı, InsertCommand NULL s öğesine izin vermeyi desteklemeyen ve varsayılan bir değere sahip olmayan herhangi bir veritabanı tablo sütunu eksikse, INSERT bildirisini yürütmeye çalışırken bir SQL hatası oluşur.Just like with the ObjectDataSource, if the InsertCommand is missing any database table columns that don t allow NULL s and don t have a default value, a SQL error will occur when attempting to execute the INSERT statement.

Note

DetailsView 'un ekleme ve düzenlemeyle ilgili hiçbir özelleştirme veya doğrulama düzeni yoktur.The DetailsView s inserting and editing interfaces lack any sort of customization or validation. Doğrulama denetimleri eklemek veya arabirimleri özelleştirmek için, BoundFields alanlarını TemplateFields 'e dönüştürmeniz gerekir.To add validation controls or to customize the interfaces, you need to convert the BoundFields to TemplateFields. Daha fazla bilgi için, Denetim Için doğrulama denetimleri ekleme ve arabirimleri ekleme ve veri değişikliği arabirimi öğreticilerini özelleştirme bölümüne bakın.Refer to the Adding Validation Controls to the Editing and Inserting Interfaces and Customizing the Data Modification Interface tutorials for more information.

Ayrıca, güncelleştiren ve silmenin yanı sıra, DetailsView 'un yalnızca DataKeyNames özelliği yapılandırılmışsa bulunan geçerli ürün DataKey değerini kullandığını göz önünde bulundurun.Also, keep in mind that for updating and deleting, the DetailsView uses the current product s DataKey value, which is only present if the DataKeyNames property is configured. Düzenlemenin veya silmenin hiçbir etkisi yoksa, DataKeyNames özelliğinin ayarlandığından emin olun.If editing or deleting appears to have no effect, ensure that the DataKeyNames property is set.

Otomatik olarak SQL deyimlerini oluşturma sınırlamalarıLimitations of Automatically Generating SQL Statements

INSERT, UPDATEve DELETE deyimlerini oluştur seçeneği yalnızca bir tablodan sütun çekerken kullanılabilir olduğundan, daha karmaşık sorgularda, 1. adımda yaptığımız gibi kendi INSERT, UPDATEve DELETE deyimlerini yazmanız gerekir.Since the Generate INSERT, UPDATE, and DELETE statements option is only available when picking columns from a table, for more complex queries you will have to write your own INSERT, UPDATE, and DELETE statements like we did in Step 1. Genellikle, SQL SELECT deyimleri, görüntüleme amacıyla bir veya daha fazla arama tablosundan veri getirmek için JOIN s kullanır (ürün bilgilerini görüntülerken Categories tablo s CategoryName alanı geri getirme gibi).Commonly, SQL SELECT statements use JOIN s to bring back data from one or more lookup tables for display purposes (such as bringing back the Categories table s CategoryName field when displaying product information). Aynı zamanda, kullanıcının temel tabloya (Bu durumdaProducts) veri düzenlemesine, güncelleştirmesine veya eklemesine izin vermek isteyebilirsiniz.At the same time, we might want to allow the user to edit, update, or insert data into the core table (Products, in this case).

INSERT, UPDATEve DELETE deyimleri el ile girilebileceği sırada, aşağıdaki zaman kazandıran ipucunu göz önünde bulundurun.While the INSERT, UPDATE, and DELETE statements can be entered manually, consider the following time-saving tip. İlk olarak, Products tablosundan verileri geri çekmesini sağlamak için SqlDataSource 'u ayarlayın.Initially setup the SqlDataSource so that it pulls back data just from the Products table. INSERT, UPDATEve DELETE deyimlerini otomatik olarak oluşturabilmeniz için, veri kaynağı Yapılandırma Sihirbazı ' nı bir tablo veya görünüm ekranından sütunları belirt ' i kullanın.Use the Configure Data Source wizard s Specify columns from a table or view screen so that you can automatically generate the INSERT, UPDATE, and DELETE statements. Ardından, Sihirbazı tamamladıktan sonra, Özellikler penceresi SelectQuery öğesini (veya alternatif olarak, veri kaynağını yapılandırma sihirbazına geri dönün, ancak özel bir SQL ifadesini veya saklı yordamı belirtin seçeneğini kullanın) seçin.Then, after completing the wizard, choose to configure the SelectQuery from the Properties window (or, alternatively, go back to the Configure Data Source wizard, but use the Specify a custom SQL statement or stored procedure option). Sonra SELECT ifadesini JOIN söz dizimini içerecek şekilde güncelleştirin.Then update the SELECT statement to include the JOIN syntax. Bu teknik, otomatik olarak oluşturulan SQL deyimlerinin zaman kazandıran avantajlarını sağlar ve daha özelleştirilmiş bir SELECT bildirimine izin verir.This technique offers the time-saving benefits of the automatically generated SQL statements and allows for a more customized SELECT statement.

INSERT, UPDATEve DELETE deyimlerini otomatik olarak oluşturmanın diğer bir sınırlaması, INSERT ve UPDATE deyimlerdeki sütunlarda SELECT deyimi tarafından döndürülen sütunları temel alır.Another limitation of automatically generating the INSERT, UPDATE, and DELETE statements is that the columns in the INSERT and UPDATE statements are based on the columns returned by the SELECT statement. Bununla birlikte, daha fazla veya daha az alan güncelleştirmeniz veya eklemeniz gerekebilir.We may need to update or insert more or fewer fields, however. Örneğin, 2. adımdaki örnekte, UnitPrice BoundField salt okunurdur.For example, in the example from Step 2, maybe we want to have the UnitPrice BoundField be read-only. Bu durumda, UpdateCommandgörünmemelidir.In that case, it shouldn't appear in the UpdateCommand. Ya da GridView 'da görünmeyen bir tablo alanının değerini ayarlamak isteyebilir.Or we may want to set the value of a table field that does not appear in the GridView. Örneğin, yeni bir kayıt eklenirken QuantityPerUnit değerini TODO olarak ayarlamak isteyebilirsiniz.For example, when adding a new record we may want the QuantityPerUnit value set to TODO .

Bu tür özelleştirmeler gerekliyse, sihirbazda Özellikler penceresi, özel bir SQL deyimi veya saklı yordam belirt seçeneğini veya bildirim temelli sözdizimini kullanarak el ile yapmanız gerekir.If such customizations are required, you need to make them manually, either through the Properties window, the Specify a custom SQL statement or stored procedure option in the wizard, or via the declarative syntax.

Note

Veri Web denetiminde karşılık gelen alanları olmayan parametreler eklenirken, bu parametre değerlerinin bir şekilde değer atanması gerektiğini aklınızda bulundurun.When adding parameters that do not have corresponding fields in the data Web control, keep in mind that these parameters values will need to be assigned values in some manner. Bu değerler: doğrudan InsertCommand veya UpdateCommandsabit kodlanmış olabilir; önceden tanımlanmış bir kaynaktan gelebilir (QueryString, oturum durumu, sayfadaki Web denetimleri vb.); ya da, önceki öğreticide gördüğünüz gibi programlı bir şekilde atanabilir.These values can be: hard-coded directly in the InsertCommand or UpdateCommand; can come from some pre-defined source (the querystring, session state, Web controls on the page, and so on); or can be assigned programmatically, as we saw in the preceding tutorial.

ÖzetSummary

Veri Web denetimlerinin yerleşik ekleme, düzenlemesi ve silme yeteneklerini kullanabilmesi için, bağlandıkları veri kaynağı denetimi bu işlevselliği sunmalıdır.In order for the data Web controls to utilize their built-in inserting, editing, and deleting capabilities, the data source control they are bound to must offer such functionality. Bu, SqlDataSource için INSERT, UPDATEve DELETE SQL deyimlerinin InsertCommand, UpdateCommandve DeleteCommand özelliklerine atanması gerektiği anlamına gelir.For the SqlDataSource, this means that INSERT, UPDATE, and DELETE SQL statements must be assigned to the InsertCommand, UpdateCommand, and DeleteCommand properties. Bu özellikler ve karşılık gelen parametreler koleksiyonları el ile eklenebilir veya veri kaynağı Yapılandırma Sihirbazı aracılığıyla otomatik olarak oluşturulabilir.These properties, and the corresponding parameters collections, can be added manually or generated automatically through the Configure Data Source wizard. Bu öğreticide her iki tekniği de inceledik.In this tutorial we examined both techniques.

Iyimser eşzamanlılık öğreticisini uygulayan ObjectDataSource ile iyimser eşzamanlılık kullanmayı inceledik.We examined using optimistic concurrency with the ObjectDataSource in the Implementing Optimistic Concurrency tutorial. Ayrıca, SqlDataSource denetimi iyimser eşzamanlılık desteği de sağlar.The SqlDataSource control also provides optimistic concurrency support. Adım 2 ' de belirtildiği gibi, INSERT, UPDATEve DELETE deyimlerini otomatik olarak oluştururken, sihirbaz bir iyimser eşzamanlılık seçeneği sunar.As noted in Step 2, when automatically generating the INSERT, UPDATE, and DELETE statements, the wizard offers a Use optimistic concurrency option. Sonraki öğreticide göreceğiniz gibi, SqlDataSource ile iyimser eşzamanlılık kullanmak, UPDATE ve DELETE deyimlerdeki WHERE yan tümceleri değiştirerek verilerin sayfada son görüntülenmesinden bu yana değiştirilmemesini sağlar.As we'll see in the next tutorial, using optimistic concurrency with the SqlDataSource modifies the WHERE clauses in the UPDATE and DELETE statements to ensure that the values for the other columns haven't changed since the data was last displayed on the page.

Programlamanın kutlu olsun!Happy Programming!

Yazar hakkındaAbout the Author

4GuysFromRolla.com 'in, Scott Mitchell, yedi ASP/ASP. net books ve 'in yazarı, 1998 sürümünden bu yana Microsoft Web teknolojileriyle çalışmaktadır.Scott Mitchell, author of seven ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Scott bağımsız danışman, Trainer ve yazıcı olarak çalışıyor.Scott works as an independent consultant, trainer, and writer. En son kitabı, 24 saat içinde ASP.NET 2,0 kendi kendinize eğitimister.His latest book is Sams Teach Yourself ASP.NET 2.0 in 24 Hours. mitchell@4GuysFromRolla.comadresinden erişilebilir .He can be reached at mitchell@4GuysFromRolla.com. ya da blog aracılığıyla http://ScottOnWriting.NETbulabilirsiniz.or via his blog, which can be found at http://ScottOnWriting.NET.