Jak aktualizovat databázi serveru SQL pomocí objektu SqlDataAdapter v jazyce Visual Basic.NET

Překlady článku Překlady článku
ID článku: 308055 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek obsahuje jazyka Microsoft Visual Basic.Ukázky kódu NET, které ukazují, jak používat SqlDataAdapter objekt, který chcete aktualizovat data změny, které jsou v databázi serveru SQL Server Objekt DataSet objekt, který je naplněn daty z tabulky v databázi.

Požadavky

Následující seznam obsahuje doporučený hardware, software, síťovou infrastrukturu, dovednosti a knowledge a požadované aktualizace service Pack:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server nebo Windows NT 4.0 Server
  • Microsoft Visual Studio.NET
  • Microsoft SQL Server verze 7.0 nebo vyšší
Tento článek předpokládá znalost těchto témat:
  • Visual Basic.NET
  • OBJEKTY ADO.NET základy a syntaxe

Popis techniky

Na SqlDataAdapter objekt slouží jako most mezi objekty ADO.NET Objekt DataSet objekt a databáze serveru SQL Server. SqlDataAdapter je zprostředkující objekt, který naplní objekty ADO.NET Objekt DataSet objekt s daty, která je načtena z databáze serveru SQL Server a aktualizuje databázi, aby odrážela změny (například vloží, aktualizace a odstranění) provedené dat pomocí Objekt DataSet objekt.

Na Událost InsertCommand, Událost UpdateCommanda Událost DeleteCommand Vlastnosti SqlDataAdapter objekt aktualizovat data změny, které jsou v databázi Objekt DataSet objekt. Tyto vlastnosti jsou SqlCommand objekty, které určují VKLÁDÁNÍ, aktualizaci a odstranění Transact-SQL příkazy, které se používají k účtování úprav objektu dataset cílové databáze. Na SqlCommand objekty, které jsou přiřazeny tyto vlastnosti mohou být vytvářeny ručně v kódu nebo automaticky generované pomocí SqlCommandBuilder objekt.

První ukázka kódu v tomto článku je popsán postup při použití SqlCommandBuilder objekt automaticky generovat Událost UpdateCommand Vlastnost SqlDataAdapter objekt. Druhý vzorek používá v situaci, kdy nelze použít příkaz Automatické generování. Druhý vzorek ukazuje, jak ručně vytvořit a použít SqlCommand objekt jako Událost UpdateCommand Vlastnost SqlDataAdapter objekt.

Vytvořit ukázkovou tabulku SQL Server

Vytvořit ukázkovou tabulku SQL Server, který lze použít v jazyce Visual Basic.ČISTÝ kód vzorky, které jsou popsány v tomto článku, postupujte takto:
  1. Spusťte nástroj SQL Query Analyzer a potom připojit k databázi, ve kterém chcete vytvořit ukázkovou tabulku. Ukázky kódu v tomto článku použít Northwind databáze, která je součástí serveru SQL Server.
  2. Vytvořit ukázkovou tabulku s názvem CustTest a vložit záznam do tabulky, spusťte následující příkazy jazyka Transact-SQL:
    Create Table CustTest
    (
     CustID int primary key,
     CustName varchar(20)
    )
    
    Insert into CustTest values(1,'John')
    					

Ukázka kódu 1: Automaticky generovány příkazy

Pokud příkaz SELECT, který použijete k načtení dat, který se naplní Objekt DataSet je založena na jedné databázové tabulky, můžete použít CommandBuilder objekt automaticky generovat Událost DeleteCommand, Událost InsertCommanda Událost UpdateCommand Vlastnosti Vlastnost DataAdapter,. To zjednodušuje a snižuje kód, který je vyžadován k provedení operace INSERT, UDPATE a odstranit.

Jako minimální požadavek, je nutné nastavit SelectCommand Vlastnost automaticky generovat příkazy. Schéma tabulky, SelectCommand načte určuje syntaxe VKLÁDÁNÍ, aktualizaci a odstranit příkazy, které jsou automaticky generovány.

Na SelectCommand musí také vrátit alespoň jeden primární klíč nebo jedinečný sloupec. Pokud nejsou přítomny žádné, je vygenerována výjimka InvalidOperation a nejsou generovány příkazy.

K vytvoření vzorku jazyka Visual Basic.NET console aplikaci, která demonstruje použití SqlCommandBuilder objekt automaticky generovat Událost DeleteCommand, Událost InsertCommanda Událost UpdateCommand Vlastnosti SqlCommand objekt pro SqlDataAdapter objekt, postupujte takto:
  1. Vytvoření nového jazyka Visual Basic.NET konzolové aplikace, postupujte takto:
    1. Spusťte aplikaci Visual Studio.NET.
    2. V Soubor příkaz Novýa klepněte na tlačítko Projekt.
    3. Klepněte na tlačítko Projekty jazyka Visual Basic ve skupinovém rámečku Typy projektůa klepněte na tlačítko Aplikace konzoly ve skupinovém rámečku Šablony.
  2. Výchozí obsah modul 1 nahraďte následující kód:
    Imports System.Data.SqlClient
    Imports Console = System.Console
    
    Module Module1
    
        Sub Main()
    
            Dim cn As New SqlConnection()
            Dim CustomersDataSet As New DataSet()
            Dim da As SqlDataAdapter
            Dim dr As DataRow
            Dim cmdBuilder As SqlCommandBuilder  
      
            'Set the connection string of the SqlConnection object to connect to the
            'SQL Server database in which you created the sample table.
    
            cn.ConnectionString = "Server=.;Database=northwind;UID=sa;PWD=;"
            cn.Open()      
    
            
            'Initialize the SqlDataAdapter object by specifying a Select command 
            'that retrieves data from the sample table.
    
            da = New SqlDataAdapter("select * from CustTest order by CustId", cn)
    
    
            'Initialize the SqlCommandBuilder object to automatically generate and initialize
            'the UpdateCommand, InsertCommand and DeleteCommand properties of the SqlDataAdapter.
    
            cmdBuilder = New SqlCommandBuilder(da)
    
            'Populate the dataset by running the Fill method of the SqlDataAdapter.
            da.Fill(CustomersDataSet, "Customers")
    
           
            'Display the Update, Insert and Delete commands that were automatically generated
            'by the SqlCommandBuilder object. 
    
            Console.WriteLine("Update command Generated by the Command Builder : ")
            Console.WriteLine("==================================================")
            Console.WriteLine(cmdBuilder.GetUpdateCommand.CommandText)
            Console.WriteLine("         ")
    
            Console.WriteLine("Insert command Generated by the Command Builder : ")
            Console.WriteLine("==================================================")
            Console.WriteLine(cmdBuilder.GetInsertCommand.CommandText)
            Console.WriteLine("         ")        
    
            Console.WriteLine("Delete command Generated by the Command Builder : ")
            Console.WriteLine("==================================================")
            Console.WriteLine(cmdBuilder.GetDeleteCommand.CommandText)
            Console.WriteLine("         ")
    
            'Write out the value in the CustName field before updating the data using the DataSet.
            Console.WriteLine("Customer Name before Update : " & CustomersDataSet.Tables("Customers").Rows(0)("CustName"))
    
            'Modify the value of the CustName field.
            CustomersDataSet.Tables("Customers").Rows(0)("CustName") = "Jack"
    
            'Post the data modification to the database.
            da.Update(CustomersDataSet, "Customers")        
    
            Console.WriteLine("Customer Name updated successfully")
    
            'Close the database connection.
            cn.Close()
    
            Console.ReadLine()
    
        End Sub
    
    End Module
  3. Uložit a spustit aplikaci. Okna konzoly se otevře a zobrazí se následující výstup:
    Update command Generated by the Command Builder : 
    ==================================================
    UPDATE CustTest SET CustID = @p1 , CustName = @p2 WHERE ( CustID = @p3 AND CustName = @p4 )
             
    Insert command Generated by the Command Builder : 
    ==================================================
    INSERT INTO CustTest( CustID , CustName ) VALUES ( @p1 , @p2 )
             
    Delete command Generated by the Command Builder : 
    ==================================================
    DELETE FROM  CustTest WHERE ( CustID = @p1 AND CustName = @p2 )   
          
    Customer Name before Update : John
    Customer Name updated successfully
    						
  4. Stiskněte libovolnou klávesu, zavřete okna konzoly a ukončit aplikace.

Ukázkový kód 2: Ruční vytvoření a inicializace událost UpdateCommand vlastnost

Výstup, který generuje kód vzorku 1 označuje logiku pro generování příkazů pro příkazy aktualizace automaticky založen optimistickou souběžnost. Záznamy není uzamčen pro úpravy, a jiní uživatelé nebo procesy lze měnit záznamy kdykoli.

Protože záznamu lze upravit po vrátil příkaz SELECT, ale před aktualizací je vydáno prohlášení, obsahuje příkaz UPDATE, který je automaticky generována klauzule WHERE, takže řádek je aktualizován pouze v případě, že obsahuje všechny původní hodnoty. Toto je zabránit přepsání nová data. Pokud příkaz UPDATE, který je generován automaticky pokusí aktualizovat řádek, který byl odstraněn nebo neobsahuje původní hodnoty, které se nacházejí v Objekt DataSet, příkaz nemá vliv na žádné záznamy, a je vygenerována výjimka DBConcurrencyException. Chcete-li otestovat s kódem v 1 ukázkový kód spustit kód v aplikaci Visual Studio Debugger nastavit zarážku po Objekt DataSet byl zaplní, ale před databáze je aktualizován a potom odstraňte jeden řádek v tabulce z SQL Query Analyzer. Na Aktualizace Volejte poté vyvolá výjimku.

Pokud chcete příkaz UPDATE dokončit bez ohledu na původní hodnoty, je nutné explicitně nastavit Událost UpdateCommand pro Vlastnost DataAdapter, a není závislý na příkaz Automatické generování.

Ruční vytvoření a inicializace Událost UpdateCommand Vlastnost SqlDataAdapter objekt, který se používá v kódu vzorek 1, postupujte takto:
  1. Nahraďte existující kód v modul Sub Main z 1 v jazyce Visual Basic.NET konzolové aplikace, kterou jste vytvořili v Ukázka kódu 1: Automaticky generovány příkazy oddíl s následujícím kódem:
    Dim cn As New SqlConnection()
    Dim CustomersDataSet As New DataSet()
    Dim da As SqlDataAdapter
    Dim dr As DataRow        
    Dim DAUpdateCmd As SqlCommand
    
    
    cn.ConnectionString = "Server=.;Database=northwind;UID=sa;PWD=;"
    cn.Open()
    
    da = New SqlDataAdapter("select * from CustTest order by CustId", cn)
    
    'Initialize the SqlCommand object that will be used as the DataAdapter's UpdateCommand.
    'Note that the WHERE clause uses only the CustId field to locate the record that is to be updated.
    
    DAUpdateCmd = New SqlCommand("Update CustTest set CustName = @pCustName where CustId = @pCustId", da.SelectCommand.Connection)
    
    
    'Create and append the parameters for the Update command.
    
    DAUpdateCmd.Parameters.Add(New SqlParameter("@pCustName", SqlDbType.VarChar))
    DAUpdateCmd.Parameters("@pCustName").SourceVersion = DataRowVersion.Current
    DAUpdateCmd.Parameters("@pCustName").SourceColumn = "CustName"
    
    DAUpdateCmd.Parameters.Add(New SqlParameter("@pCustId", SqlDbType.Int))
    DAUpdateCmd.Parameters("@pCustId").SourceVersion = DataRowVersion.Original
    DAUpdateCmd.Parameters("@pCustId").SourceColumn = "CustId"
    
    
    'Assign the SqlCommand to the UpdateCommand property of the SqlDataAdapter.
    da.UpdateCommand = DAUpdateCmd        
    
    da.Fill(CustomersDataSet, "Customers")        
    
    Console.WriteLine("Customer Name before Update : " & CustomersDataSet.Tables("Customers").Rows(0)("CustName"))
    
    CustomersDataSet.Tables("Customers").Rows(0)("CustName") = "Jack"
    da.Update(CustomersDataSet, "Customers")        
    
    Console.WriteLine("Customer Name updated successfully")
    
    cn.Close()
    Console.ReadLine()
    
    					
  2. Opakujte kroky 1 až 4 v Ukázka kódu 1: Automaticky generovány příkazy sekce. Všimněte si, že již generována výjimka DBConcurrencyException.

Vlastnosti

ID článku: 308055 - Poslední aktualizace: 18. května 2011 - Revize: 4.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Klíčová slova: 
kbhowtomaster kbsqlclient kbsystemdata kbmt KB308055 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:308055

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com