Sdílet prostřednictvím


Vytvoření jednoduché datové aplikace pomocí ADO.NET

 

Publikováno: duben 2016

Když vytvoříte aplikaci, která zpracuje data v databázi, provádět základní úlohy takové definování připojovací řetězce, vkládání dat a spuštění uložené procedury. Pomocí následujících v tomto tématu, je možné zjistit, jak pracovat s databází z v rámci jednoduché "forms over data aplikace Windows Forms pomocí Visual C# nebo Visual Basic a ADO.NET. Veškeré .NET data technologie včetně datové sady, technologie LINQ to SQL a Entity Framework nakonec proveďte kroky, které jsou velmi podobné těm, které jsou uvedené v tomto článku.

Tento článek ukazuje jednoduchý způsob, jak získat data z databáze velmi rychlé způsobem. Pokud aplikace potřebuje k úpravě dat netriviální způsoby a aktualizaci databáze, poté zvažte pomocí Entity Framework a používání datové vazby ovládacích prvků uživatelského rozhraní na změny v zadaných dat automaticky synchronizovat.

Důležité

Zachovat jednoduchý kód, neobsahuje zpracování výjimek produkce.

V tomto tématu

  • Nastavení ukázkové databáze

  • Vytvoření formulářů a přidání ovládacích prvků

  • Uložení připojovacího řetězce

  • Načtení připojovacího řetězce

  • Psaní kódu pro formuláře

  • Otestujte aplikaci

Požadavky

Chcete-li vytvořit aplikaci, budete potřebovat:

  • Visual Studio Community Edition

  • SQL Server Express LocalDB

  • Malé ukázkové databáze, který vytvoříte pomocí následujících kroků v Vytvořit databázi SQL pomocí skriptu.

  • Připojovací řetězec pro databázi po jeho nastavení. Tuto hodnotu můžete najít otevřením Průzkumník objektů systému SQL Server, otevřete místní nabídku pro databázi, výběr Vlastnosti, a potom posouvání připojovací řetězec vlastnost.

Toto téma předpokládá, že se seznámíte s základní funkce integrovaného vývojového prostředí sady Visual Studio a můžete vytvořit aplikace modelu Windows Forms, přidejte formuláře na tento projekt put tlačítek a jiných ovládacích prvků na těchto formulářích nastavit vlastnosti těchto ovládacích prvků a jednoduché události kódu. Pokud si nejste spokojení s těmito úkoly, doporučujeme provést Začínáme s jazykem Visual C# a Visual Basic kurzy před zahájením tohoto tématu.

Nastavení ukázkové databáze

Ukázkové databáze v tomto návodu se skládá z tabulky zákazníka a objednávky. V tabulkách původně obsahovat žádná data, ale přidáte dat při spuštění aplikace, který vytvoříte. Databáze má také pět jednoduché uložené procedury.Vytvořit databázi SQL pomocí skriptu obsahuje skript Transact-SQL, který vytvoří v tabulkách, primární a cizí klíče, omezení a uložené procedury.

Vytvoření formulářů a přidání ovládacích prvků

  1. Vytvoření projektu pro aplikaci Windows Forms a pojmenujte ji SimpleDataApp.

    Visual Studio vytvoří projekt a několik souborů, včetně prázdný formulář Windows, který je pojmenován Form1.

  2. Přidání dvou Windows forms do projektu tak, aby měl tři formy a přiřaďte jim následující názvy.

    • Navigace

    • Nový zákazník

    • FillOrCancel

  3. Pro každý formulář přidáte textová pole, tlačítek a jiných ovládacích prvků, které se zobrazují na následujících obrázcích. Pro každý ovládací prvek nastavte vlastnosti, které jsou popsány v tabulce.

    Poznámka

    Skupinový rámeček a ovládací prvky popisek přidat přehlednost, ale nejsou používány v kódu.

Navigace formuláře

Navigation dialog box

Ovládací prvky pro navigaci formuláře Vlastnosti
Tlačítko Název = btnGoToAdd
Tlačítko Název = btnGoToFillOrCancel
Tlačítko Název = btnExit

Nový zákazník formuláře

Add a new customer and place an order

Ovládací prvky pro nový zákazník formulář Vlastnosti
Textové pole Název = txtCustomerName
Textové pole Název = txtCustomerID

ReadOnly = True
Tlačítko Název = btnCreateAccount
NumericUpdown Počet desetinných míst = 0

Maximální = 5000

Název = numOrderAmount
DateTimePicker Formát = Short

Název = dtpOrderDate
Tlačítko Název = btnPlaceOrder
Tlačítko Název = btnAddAnotherAccount
Tlačítko Název = btnAddFinish

FillOrCancel formuláře

fill or cancel orders

Ovládací prvky pro formulář FillOrCancel Vlastnosti
Textové pole Název = txtOrderID
Tlačítko Název = btnFindByOrderID
DateTimePicker Formát = Short

Název = dtpFillDate
DataGridView Název = dgvCustomerOrders

ReadOnly = True

RowHeadersVisible = False
Tlačítko Název = btnCancelOrder
Tlačítko Název = btnFillOrder
Tlačítko Název = btnFinishUpdates

Uložení připojovacího řetězce

Když se aplikace pokusí otevřít připojení k databázi, aplikace musí mít přístup k připojovací řetězec. Aby nedocházelo k ruční zadání řetězce na každý formulář, uložení řetězce v konfiguračním souboru aplikace v projektu a vytvořte metodu, která vrací řetězec při volání z libovolného formuláře v aplikaci.

Připojovací řetězec, který lze nalézt v Průzkumník objektů systému SQL Server, pravým tlačítkem myši na databázi, zvolením vlastnosti a pak hledání vlastnost ConnectionString. Pomocí kombinace kláves Ctrl A vyberte řetězec.

  1. V Průzkumníku řešení zvolte Vlastnosti uzlu v rámci projektu a pak zvolte Settings.settings.

  2. V název sloupec, zadejte connString.

  3. V typu vyberte (připojovací řetězec).

  4. V oboru vyberte aplikace.

  5. V hodnotu sloupec, zadejte připojovací řetězec (bez mimo uvozovky) a potom změny uložte.

Poznámka

V reálné aplikaci byste měli uložit připojovací řetězec bezpečně, jak je popsáno v Connection Strings and Configuration Files

Načtení připojovacího řetězce

  1. Na řádku nabídek zvolte projektu, Přidat odkaz na, a poté přidejte odkaz na System.Configuration.dll.

  2. Na řádku nabídek zvolte projektu, Přidat třídu do projektu přidat soubor třídy a pak zadejte název souboru Utility.

    Visual Studio vytvoří soubor a zobrazí jej v Průzkumníku řešení.

  3. V souboru nástroje nahraďte zástupný symbol kód následujícím kódem. Všimněte si číslované komentáře (s předponou Util-), které identifikují oddíly kódu. Tabulka, která následuje kód volá si klíčové body.

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
    using System.Threading.Tasks;  
    //Util-1 More namespaces.  
    using System.Configuration;   
    
    namespace SimpleDataApp  
    {  
        internal class Utility  
        {  
    
            //Get the connection string from App config file.  
            internal static string GetConnectionString()  
            {  
                //Util-2 Assume failure.  
                string returnValue = null;  
    
                //Util-3 Look for the name in the connectionStrings section.  
                ConnectionStringSettings settings =  
                ConfigurationManager.ConnectionStrings["SimpleDataApp.Properties.Settings.connString"];  
    
                //If found, return the connection string.  
                if (settings != null)  
                    returnValue = settings.ConnectionString;  
    
                return returnValue;  
            }  
        }  
    }  
    
    Imports System  
    Imports System.Collections.Generic  
    Imports System.Linq  
    Imports System.Text  
    Imports System.Threading.Tasks  
    ' Util-1 More namespaces.  
    Imports System.Configuration  
    
    Namespace SimpleDataApp  
        Friend Class Utility  
    
            ' Get connection string from App config file.  
            Friend Shared Function GetConnectionString() As String  
    
                ' Util-2 Assume failure.  
                Dim returnValue As String = Nothing  
    
                ' Util-3 Look for the name in the connectionStrings section.  
                Dim settings As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("SimpleDataApp.My.MySettings.connString")  
    
                ' If found, return the connection string.  
                If settings IsNot Nothing Then  
                    returnValue = settings.ConnectionString  
                End If  
    
                Return returnValue  
            End Function  
        End Class  
    End Namespace  
    
    Komentář Popis
    Util-1 Přidáte obor názvů System.Configuration.
    Util 2 Definování proměnné, returnValue, a inicializujte ho, aby null (C#) nebo Nothing (Visual Basic).
    Util 3 I když jste zadali connString jako název připojovacího řetězce v Vlastnosti okna, je nutné zadat "SimpleDataApp.Properties.Settings.connString" (C#) nebo "SimpleDataApp.My.MySettings.connString" (Visual Basic) v kódu.

Psaní kódu pro formuláře

Tato část obsahuje stručný přehledy co každý formulář nemá a zobrazuje kód, který vytváří formulářů. Číslované komentáře identifikaci části kódu.

Otevře se formulář navigační při spuštění aplikace.Přidat účet pro tlačítko otevře formulář nový zákazník.Výplň nebo zrušení objednávky tlačítko otevře formulář FillOrCancel.Ukončovací tlačítko ukončí aplikaci.

Usnadnění navigace formuláři formulář spuštění.

Pokud používáte C# v Průzkumníku řešení, otevřete Program.cs a poté změňte Application.Run řádku do tohoto: Application.Run(new Navigation());

Pokud používáte v jazyce Visual Basic Průzkumníku řešení, otevřete Vlastnosti okna, zvolte aplikace a poté klikněte na příkaz SimpleDataApp.Navigation na formulář spuštění seznamu.

Vytváření obslužných rutin událostí

Poklepejte na tři tlačítka ve formuláři Vytvoření metod prázdnou obslužnou rutinu události.

Vytvoření kódu pro navigaci

Ve formuláři, navigace nahraďte existující kód následujícím kódem.

using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
using System.Windows.Forms;  
  
namespace SimpleDataApp  
{  
    public partial class Navigation : Form  
    {  
        public Navigation()  
        {  
            InitializeComponent();  
        }  
  
        //Open the NewCustomer form as a dialog box, which will return focus to the calling form when it closes.  
        private void btnGoToAdd_Click(object sender, EventArgs e)  
        {  
            Form frm = new NewCustomer();  
            frm.Show();  
        }  
  
        //Open the FillorCancel form as a dialog box.  
        private void btnGoToFillOrCancel_Click(object sender, EventArgs e)  
        {  
            Form frm = new FillOrCancel();  
            frm.ShowDialog();  
        }  
  
        //Close the application, not just the Navigation form.  
        private void btnExit_Click(object sender, EventArgs e)  
        {  
            this.Close();  
        }  
    }  
}  
Imports System  
Imports System.Collections.Generic  
Imports System.ComponentModel  
Imports System.Data  
Imports System.Drawing  
Imports System.Linq  
Imports System.Text  
Imports System.Threading.Tasks  
Imports System.Windows.Forms  
  
Namespace SimpleDataApp  
    Partial Public Class Navigation  
        Inherits Form  
        Public Sub New()  
            InitializeComponent()  
        End Sub  
  
        ' Open the NewCustomer form as a dialog box, which will return focus to the calling form when it closes.  
        Private Sub btnGoToAdd_Click() Handles btnGoToAdd.Click  
            Dim frm As Form = New NewCustomer()  
            frm.Show()  
        End Sub  
  
        ' Open the FillorCancel form as a dialog box.  
        Private Sub btnGoToFillOrCancel_Click() Handles btnGoToFillOrCancel.Click  
            Dim frm As Form = New FillOrCancel()  
            frm.ShowDialog()  
        End Sub  
  
        ' Close the application, not just the Navigation form.  
        Private Sub btnExit_Click() Handles btnExit.Click  
            Me.Close()  
        End Sub  
    End Class  
End Namespace  
  

Nový zákazník formuláře

Po zadání jméno zákazníka a poté klikněte vytvořit účet tlačítko Nový zákazník form vytvoří účet zákazníka a SQL Server vrátí hodnotu IDENTITY jako nové číslo účtu. Potom umístěte objednávky pro nový účet zadáním částku a datum objednávky a výběr objednat tlačítko.

Vytváření obslužných rutin událostí

Vytvořit prázdný klikněte na obslužnou rutinu události pro každé tlačítko ve formuláři.

Vytvoření kódu pro nový zákazník

Přidejte následující kód do formuláře nový zákazník. Krokovat každý blok kódu pomocí tabulky a číslované komentáře po kódu.

using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
using System.Windows.Forms;  
//NC-1 More namespaces.  
using System.Data.SqlClient;  
using System.Configuration;  
  
namespace SimpleDataApp  
{  
    public partial class NewCustomer : Form  
    {  
        //NC-2 Storage for IDENTITY values returned from database.  
        private int parsedCustomerID;  
        private int orderID;  
  
        //NC-3 Specify a connection string.  
        string connstr = SimpleDataApp.Utility.GetConnectionString();  
  
        public NewCustomer()  
        {  
            InitializeComponent();  
        }  
  
        //NC-4 Create account.  
        private void btnCreateAccount_Click(object sender, EventArgs e)  
        {  
            //NC-5 Set up and run stored procedure only if Customer Name is present.  
            if (isCustomerName())  
            {  
  
                //NC-6 Create the connection.  
                SqlConnection conn = new SqlConnection(connstr);  
  
                //NC-7 Create a SqlCommand, and identify it as a stored procedure.  
                SqlCommand cmdNewCustomer = new SqlCommand("Sales.uspNewCustomer", conn);  
                cmdNewCustomer.CommandType = CommandType.StoredProcedure;  
  
                //NC-8 Add input parameter from the stored procedure and specify what to use as its value.  
                cmdNewCustomer.Parameters.Add(new SqlParameter("@CustomerName", SqlDbType.NVarChar, 40));  
                cmdNewCustomer.Parameters["@CustomerName"].Value = txtCustomerName.Text;  
  
                //NC-9 Add output parameter.  
                cmdNewCustomer.Parameters.Add(new SqlParameter("@CustomerID", SqlDbType.Int));  
                cmdNewCustomer.Parameters["@CustomerID"].Direction = ParameterDirection.Output;  
  
                //NC-10 try-catch-finally  
                try  
                {  
                    //NC-11 Open the connection.  
                    conn.Open();  
  
                    //NC-12 Run the stored procedure.  
                    cmdNewCustomer.ExecuteNonQuery();  
  
                    //NC-13 Customer ID is an IDENTITY value from the database.   
                    this.parsedCustomerID = (int)cmdNewCustomer.Parameters["@CustomerID"].Value;  
                    this.txtCustomerID.Text = Convert.ToString(parsedCustomerID);  
  
                }  
                catch  
                {  
                    //NC-14 A simple catch.  
  
                    MessageBox.Show("Customer ID was not returned. Account could not be created.");  
                }  
                finally  
                {  
                    //NC-15 Close the connection.  
                    conn.Close();  
                }  
            }  
        }  
  
        //NC-16 Verify that Customer Name is present.  
        private bool isCustomerName()  
        {  
            if (txtCustomerName.Text == "")  
            {  
                MessageBox.Show("Please enter a name.");  
                return false;  
            }  
            else  
            {  
                return true;  
            }  
        }  
  
        //NC-17 Place order.  
        private void btnPlaceOrder_Click(object sender, EventArgs e)  
        {  
            //NC-18 Set up and run stored procedure only if required input is present.  
            if (isPlaceOrderReady())  
            {  
                // Create the connection.  
                SqlConnection conn = new SqlConnection(connstr);  
  
                //NC-19 Create SqlCommand and identify it as a stored procedure.  
                SqlCommand cmdNewOrder = new SqlCommand("Sales.uspPlaceNewOrder", conn);  
                cmdNewOrder.CommandType = CommandType.StoredProcedure;  
  
                //NC-20 @CustomerID, which was an output parameter from uspNewCustomer.  
                cmdNewOrder.Parameters.Add(new SqlParameter("@CustomerID", SqlDbType.Int));  
                cmdNewOrder.Parameters["@CustomerID"].Value = this.parsedCustomerID;  
  
                //NC-21 @OrderDate.  
                cmdNewOrder.Parameters.Add(new SqlParameter("@OrderDate", SqlDbType.DateTime, 8));  
                cmdNewOrder.Parameters["@OrderDate"].Value = dtpOrderDate.Value;  
  
                //NC-22 @Amount.  
                cmdNewOrder.Parameters.Add(new SqlParameter("@Amount", SqlDbType.Int));  
                cmdNewOrder.Parameters["@Amount"].Value = numOrderAmount.Value;  
  
                //NC-23 @Status. For a new order, the status is always O (open)  
                cmdNewOrder.Parameters.Add(new SqlParameter("@Status", SqlDbType.Char, 1));  
                cmdNewOrder.Parameters["@Status"].Value = "O";  
  
                //NC-24 Add return value for stored procedure, which is the orderID.  
                cmdNewOrder.Parameters.Add(new SqlParameter("@RC", SqlDbType.Int));  
                cmdNewOrder.Parameters["@RC"].Direction = ParameterDirection.ReturnValue;  
  
                //try – catch - finally  
                try  
                {  
                    //Open connection.  
                    conn.Open();  
  
                    //Run the stored procedure.  
                    cmdNewOrder.ExecuteNonQuery();  
  
                    //NC-25 Display the order number.  
                    this.orderID = (int)cmdNewOrder.Parameters["@RC"].Value;  
                    MessageBox.Show("Order number " + this.orderID + " has been submitted.");  
                }  
                catch  
                {  
                    //A simple catch.  
                    MessageBox.Show("Order could not be placed.");  
                }  
                finally  
                {  
                    //Close connection.  
                    conn.Close();  
                }  
            }  
        }  
  
        //NC-26 Verify that order data is ready.  
        private bool isPlaceOrderReady()  
        {  
            // Verify that CustomerID is present.  
            if (txtCustomerID.Text == "")  
            {  
                MessageBox.Show("Please create customer account before placing order.");  
                return false;  
            }  
  
            // Verify that Amount isn't 0.   
            else if ((numOrderAmount.Value < 1))  
            {  
                MessageBox.Show("Please specify an order amount.");  
                return false;  
            }  
            else  
            {  
                // Order can be submitted.  
                return true;  
            }  
        }  
  
        //NC-27 Reset the form for another new account  
        private void btnAddAnotherAccount_Click(object sender, EventArgs e)  
        {  
            this.ClearForm();  
        }  
  
        //NC-28 Clear values from controls  
        private void ClearForm()  
        {  
            txtCustomerName.Clear();  
            txtCustomerID.Clear();  
            dtpOrderDate.Value = DateTime.Now;  
            numOrderAmount.Value = 0;  
            this.parsedCustomerID = 0;  
        }  
  
        //NC-29 Close the form.  
        private void btnAddFinish_Click(object sender, EventArgs e)  
        {  
            this.Close();  
        }  
  
    }  
}  
  
Imports System  
Imports System.Collections.Generic  
Imports System.ComponentModel  
Imports System.Data  
Imports System.Drawing  
Imports System.Linq  
Imports System.Text  
Imports System.Threading.Tasks  
Imports System.Windows.Forms  
' NC-1 More namespaces.  
Imports System.Data.SqlClient  
Imports System.Configuration  
  
Namespace SimpleDataApp  
    Partial Public Class NewCustomer  
        Inherits Form  
  
        ' NC-2 Storage for IDENTITY values returned from database.  
        Private parsedCustomerID As Integer  
        Private orderID As Integer  
  
        ' NC-3 Specify a connection string.  
        Private connstr As String = SimpleDataApp.Utility.GetConnectionString()  
  
        Public Sub New()  
            InitializeComponent()  
        End Sub  
  
        ' NC-4 Create account.  
        Private Sub btnCreateAccount_Click() Handles btnCreateAccount.Click  
  
            ' NC-5 Set up and run stored procedure only if Customer Name is present.  
            If isCustomerName() Then  
  
                ' NC-6 Create the connection.  
                Dim conn As New SqlConnection(connstr)  
  
                ' NC-7 Create a SqlCommand, and identify it as a stored procedure.  
                Dim cmdNewCustomer As New SqlCommand("Sales.uspNewCustomer", conn)  
                cmdNewCustomer.CommandType = CommandType.StoredProcedure  
  
                ' NC-8 Add input parameter from the stored procedure and specify what to use as its value.  
                cmdNewCustomer.Parameters.Add(New SqlParameter("@CustomerName", SqlDbType.NVarChar, 40))  
                cmdNewCustomer.Parameters("@CustomerName").Value = txtCustomerName.Text  
  
                ' NC-9 Add output parameter.  
                cmdNewCustomer.Parameters.Add(New SqlParameter("@CustomerID", SqlDbType.Int))  
                cmdNewCustomer.Parameters("@CustomerID").Direction = ParameterDirection.Output  
  
                ' NC-10 try-catch-finally  
                Try  
                    ' NC-11 Open the connection.  
                    conn.Open()  
  
                    ' NC-12 Run the stored procedure.  
                    cmdNewCustomer.ExecuteNonQuery()  
  
                    ' NC-13 Customer ID is an IDENTITY value from the database.   
                    Me.parsedCustomerID = CInt(cmdNewCustomer.Parameters("@CustomerID").Value)  
                    Me.txtCustomerID.Text = Convert.ToString(parsedCustomerID)  
  
                Catch  
                    ' NC-14 A simple catch.  
                    MessageBox.Show("Customer ID was not returned. Account could not be created.")  
                Finally  
                    ' NC-15 Close the connection.  
                    conn.Close()  
                End Try  
            End If  
        End Sub  
  
        ' NC-16 Verify that Customer Name is present.  
        Private Function isCustomerName() As Boolean  
            If txtCustomerName.Text = "" Then  
                MessageBox.Show("Please enter a name.")  
                Return False  
            Else  
                Return True  
            End If  
        End Function  
  
        ' NC-17 Place order.  
        Private Sub btnPlaceOrder_Click() Handles btnPlaceOrder.Click  
  
            ' NC-18 Set up and run stored procedure only if necessary input is present.  
            If isPlaceOrderReady() Then  
  
                ' Create the connection.  
                Dim conn As New SqlConnection(connstr)  
  
                ' NC-19 Create SqlCommand and identify it as a stored procedure.  
                Dim cmdNewOrder As New SqlCommand("Sales.uspPlaceNewOrder", conn)  
                cmdNewOrder.CommandType = CommandType.StoredProcedure  
  
                ' NC-20 @CustomerID, which was an output parameter from uspNewCustomer.  
                cmdNewOrder.Parameters.Add(New SqlParameter("@CustomerID", SqlDbType.Int))  
                cmdNewOrder.Parameters("@CustomerID").Value = Me.parsedCustomerID  
  
                ' NC-21 @OrderDate.  
                cmdNewOrder.Parameters.Add(New SqlParameter("@OrderDate", SqlDbType.DateTime, 8))  
                cmdNewOrder.Parameters("@OrderDate").Value = dtpOrderDate.Value  
  
                ' NC-22 @Amount.  
                cmdNewOrder.Parameters.Add(New SqlParameter("@Amount", SqlDbType.Int))  
                cmdNewOrder.Parameters("@Amount").Value = numOrderAmount.Value  
  
                ' NC-23 @Status. For a new order, the status is always O (open).  
                cmdNewOrder.Parameters.Add(New SqlParameter("@Status", SqlDbType.[Char], 1))  
                cmdNewOrder.Parameters("@Status").Value = "O"  
  
                ' NC-24 add return value for stored procedure, which is the orderID  
                cmdNewOrder.Parameters.Add(New SqlParameter("@RC", SqlDbType.Int))  
                cmdNewOrder.Parameters("@RC").Direction = ParameterDirection.ReturnValue  
  
                ' try – catch - finally  
                Try  
                    ' Open connection.  
                    conn.Open()  
  
                    ' Run the stored procedure.  
                    cmdNewOrder.ExecuteNonQuery()  
  
                    ' NC-25 Display the order number.  
                    Me.orderID = CInt(cmdNewOrder.Parameters("@RC").Value)  
                    MessageBox.Show("Order number " & (Me.orderID).ToString & " has been submitted.")  
  
                Catch  
                    ' A simple catch.  
                    MessageBox.Show("Order could not not be placed.")  
  
                Finally  
                    ' Close connection.  
                    conn.Close()  
                End Try  
            End If  
        End Sub  
  
        ' NC-26 Verify that order data is ready.  
        Private Function isPlaceOrderReady() As Boolean  
  
            ' Verify that CustomerID is present.  
            If txtCustomerID.Text = "" Then  
                MessageBox.Show("Please create customer account before placing order.")  
                Return False  
  
                ' Verify that Amount isn't 0   
            ElseIf (numOrderAmount.Value < 1) Then  
  
                MessageBox.Show("Please specify an order amount.")  
                Return False  
            Else  
                ' Order can be submitted.  
                Return True  
            End If  
        End Function  
  
        ' NC-27 Reset the form for another new account.  
        Private Sub btnAddAnotherAccount_Click() Handles btnAddAnotherAccount.Click  
            Me.ClearForm()  
        End Sub  
  
        ' NC-28 Clear values from controls.  
        Private Sub ClearForm()  
            txtCustomerName.Clear()  
            txtCustomerID.Clear()  
            dtpOrderDate.Value = DateTime.Now  
            numOrderAmount.Value = 0  
            Me.parsedCustomerID = 0  
        End Sub  
  
        ' NC-29 Close the form.  
        Private Sub btnAddFinish_Click() Handles btnAddFinish.Click  
            Me.Close()  
        End Sub  
  
    End Class  
End Namespace  
Komentář Popis
NC-1 Přidejte do seznamu obory názvů System.Data.SqlClient a System.Configuration.
NC-2 Deklarovat parsedCustomerID a orderID proměnné, které budete používat později.
NC-3 Volání GetConnectionString Metoda získat připojovací řetězec ze souboru config aplikace a ukládají hodnotu v connstr proměnné řetězce.
NC-4 Přidat kód pro obslužnou rutinu události kliknutí btnCreateAccount tlačítko.
NC-5 Obtékání volání isCustomerName okolo kódu, klikněte na tlačítko události tak, aby uspNewCustomer spustí pouze v případě, že je k dispozici jméno zákazníka.
NC-6 Vytvoření SqlConnection objektu (conn) a předat do připojovacího řetězce v connstr.
NC-7 Vytvoření SqlCommand objektu, cmdNewCustomer.

- Zadejte Sales.uspNewCustomer jako uloženou proceduru spustit.
- Použití CommandType vlastnost určit, že je příkaz uložené procedury.
NC-8 Přidat @CustomerName vstupní parametr z uložené procedury.

- Přidat parametr, který se Parameters kolekce.
- Výčet SqlDbType použijte k určení typu parametru jako nvarchar(40).
- Zadejte txtCustomerName.Text jako zdroj.
NC-9 Přidáte parametr výstup z uložené procedury.

- Přidat parametr, který se Parameters kolekce.
- Použití ParameterDirection.Output k identifikaci parametru jako výstup.
NC-10 Přidejte Try-Catch – blok Finally k otevření připojení, spuštění uložené procedury, zpracování výjimek a pak zavřete připojení.
NC 11 Otevření připojení (conn), vytvořené na NC-6.
NC-12 Použití cmdNewCustomerna ExecuteNonQuery metodu pro spuštění Sales.uspNewCustomer uložené procedury, který se spouští INSERT příkaz, nikoliv v dotazu.
NC-13 @CustomerID Hodnota je vrácena jako hodnotu IDENTITY z databáze. Protože je celé číslo, musíte ji převést na řetězec zobrazíte v textovém poli ID zákazníka.

- Můžete deklarovat parsedCustomerID na NC 2.
- Úložiště @CustomerID hodnotu ve parsedCustomerID pro pozdější použití.
- Převést na řetězec ID vrácené zákazníka a vložte jej do txtCustomerID.Text.
NC-14 Tato ukázka přidáte klauzuli jednoduchý, není vysoce kvalitní catch.
NC-15 Vždy uzavřít připojení po dokončení práce, takže mohou být vydány do fondu připojení. Viz připojení k serveru SQL sdružování (ADO.NET).
NC-16 Definujte metodu k ověření, zda je k dispozici jméno zákazníka.

- Pokud je pole prázdné, zobrazit zprávu a vraťte false, protože název je nezbytný k vytvoření účtu.
- Pokud pole není prázdný, vrátí true.
NC-17 Přidat kód pro obslužnou rutinu události kliknutí btnPlaceOrder tlačítko.
NC-18 Obtékání volání isPlaceOrderReady kolem btnPlaceOrder_Click Kód události tak, aby uspPlaceNewOrder nefunguje v případě potřeby vstup není přítomen.
NC-19 až NC 25 Tyto části kódu se podobají kód, který jste přidali pro btnCreateAccount_Click obslužná rutina události.

- NC-19. Vytvořte SqlCommand objektu, cmdNewOrder, a zadejte Sales.uspPlaceOrder jako uložené procedury.
- NC-20 až NC 23 jsou vstupní parametry pro uloženou proceduru.
- NC-24.@RC bude obsahovat návratovou hodnotu, která je ID generované objednávky z databáze. Směr tohoto parametru je zadán jako ReturnValue.
- NC-25. Uložení hodnoty ID objednávky v orderID proměnnou, která je deklarována v NC-2 a zobrazované hodnoty v okně se zprávou.
NC-26 Definovat metodu k ověření, zda existuje ID zákazníka a že k množství bylo zadáno v numOrderAmount.
NC 27 Volání ClearForm Metoda v btnAddAnotherAccount klikněte na tlačítko obslužná rutina události.
NC-28 Vytvořte ClearForm Metoda vymazat hodnoty z formuláře, pokud chcete přidat jiného zákazníka.
NC29 Zavřete formulář nový zákazník a vrátit fokus navigace formuláře.

FillOrCancel formuláře

Formulář FillorCancel spustí dotaz k vrácení pořadí, pokud zadáte ID objednávky a zvolte Najít pořadí tlačítko. Vrácený řádek, který se zobrazí v mřížce dat jen pro čtení. Pokud se rozhodnete, můžete je označit pořadí jako zrušené (X) Zrušit objednávku tlačítko, nebo můžete označit pořadí jako vyplněné (F) Pokud se rozhodnete vyplnění pořadí tlačítko. Pokud zvolíte Najít pořadí tlačítko znovu, se zobrazí aktualizovaná řádek.

Vytváření obslužných rutin událostí

Vytvořit prázdnou klikněte na tlačítko obslužné rutiny událostí pro čtyři tlačítka ve formuláři.

Vytvoření kódu pro FillOrCancel

Přidejte následující kód do formuláře FillOrCancel. Pomocí číslované komentáře a tabulku, která následuje kód krokovat bloky kódu.

using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
using System.Windows.Forms;  
//FC-1 More namespaces.  
using System.Text.RegularExpressions;  
using System.Data.SqlClient;  
using System.Configuration;  
  
namespace SimpleDataApp  
{  
    public partial class FillOrCancel : Form  
    {  
        //FC-2 Storage for OrderID.  
        private int parsedOrderID;  
  
        //FC-3 Specify a connection string.  
        string connstr = SimpleDataApp.Utility.GetConnectionString();  
  
        public FillOrCancel()  
        {  
            InitializeComponent();  
        }  
  
        //FC-4 Find an order.  
        private void btnFindByOrderID_Click(object sender, EventArgs e)  
        {  
            //FC-5 Prepare the connection and the command  
            if (isOrderID())  
            {  
                //Create the connection.  
                SqlConnection conn = new SqlConnection(connstr);  
  
                //Define a query string that has a parameter for orderID.  
                string sql = "select * from Sales.Orders where orderID = @orderID";  
  
                //Create a SqlCommand object.  
                SqlCommand cmdOrderID = new SqlCommand(sql, conn);  
  
                //Define the @orderID parameter and its value.  
                cmdOrderID.Parameters.Add(new SqlParameter("@orderID", SqlDbType.Int));  
                cmdOrderID.Parameters["@orderID"].Value = parsedOrderID;  
  
                //try – catch - finally  
                try  
                {  
                    //FC-6 Run the command and display the results.  
                    //Open the connection.  
                    conn.Open();  
  
                    //Run the command by using SqlDataReader.  
                    SqlDataReader rdr = cmdOrderID.ExecuteReader();  
  
                    //Create a data table to hold the retrieved data.  
                    DataTable dataTable = new DataTable();  
  
                    //Load the data from SqlDataReader into the data table.  
                    dataTable.Load(rdr);  
  
                    //Display the data from the datatable in the datagridview.  
                    this.dgvCustomerOrders.DataSource = dataTable;  
  
                    //Close the SqlDataReader.  
                    rdr.Close();  
                }  
                catch  
                {  
                    //A simple catch.  
                    MessageBox.Show("The requested order could not be loaded into the form.");  
                }  
                finally  
                {  
                    //Close the connection.  
                    conn.Close();  
                }  
            }  
        }  
  
        //FC-7 Cancel an order.  
        private void btnCancelOrder_Click(object sender, EventArgs e)  
        {  
            //Set up and run stored procedure only if OrderID is ready.  
            if (isOrderID())  
            {  
                //Create the connection.  
                SqlConnection conn = new SqlConnection(connstr);  
  
                // Create command and identify it as a stored procedure.  
                SqlCommand cmdCancelOrder = new SqlCommand("Sales.uspCancelOrder", conn);  
                cmdCancelOrder.CommandType = CommandType.StoredProcedure;  
  
                cmdCancelOrder.Parameters.Add(new SqlParameter("@orderID", SqlDbType.Int));  
                cmdCancelOrder.Parameters["@orderID"].Value = parsedOrderID;  
  
                // try-catch-finally  
                try  
                {  
                    // Open the connection.  
                    conn.Open();  
  
                    // Run the cmdCancelOrder command.  
                    cmdCancelOrder.ExecuteNonQuery();  
                }  
                // A simple catch.  
                catch  
                {  
                    MessageBox.Show("The cancel operation was not completed.");  
                }  
                finally  
                {  
                    //Close connection.  
                    conn.Close();  
                }  
            }  
        }  
  
        //FC-8 Fill an order.  
        private void btnFillOrder_Click(object sender, EventArgs e)  
        {  
            //Set up and run stored procedure only if OrderID is ready.  
            if (isOrderID())  
            {  
                //Create the connection.  
                SqlConnection conn = new SqlConnection(connstr);  
  
                //Create command and identify it as a stored procedure.  
                SqlCommand cmdFillOrder = new SqlCommand("Sales.uspFillOrder", conn);  
                cmdFillOrder.CommandType = CommandType.StoredProcedure;  
  
                // Add input parameter from the stored procedure.  
                cmdFillOrder.Parameters.Add(new SqlParameter("@orderID", SqlDbType.Int));  
                cmdFillOrder.Parameters["@orderID"].Value = parsedOrderID;  
  
                //Add the second input parameter.  
                cmdFillOrder.Parameters.Add(new SqlParameter("@FilledDate", SqlDbType.DateTime, 8));  
                cmdFillOrder.Parameters["@FilledDate"].Value = dtpFillDate.Value;  
  
                //try – catch - finally  
                try  
                {  
                    //Open the connection.  
                    conn.Open();  
  
                    //Run the cmdFillOrder command.  
                    cmdFillOrder.ExecuteNonQuery();  
                }  
                catch  
                {  
                    //A simple catch.  
                    MessageBox.Show("The fill operation was not completed.");  
                }  
                finally  
                {  
                    //Close the connection.  
                    conn.Close();  
                }  
            }  
        }  
  
        //FC-9 Verify that OrderID is ready.  
        private bool isOrderID()  
        {  
  
            //Check for input in the Order ID text box.  
            if (txtOrderID.Text == "")  
            {  
                MessageBox.Show("Please specify the Order ID.");  
                return false;  
            }  
  
            // Check for characters other than integers.  
            else if (Regex.IsMatch(txtOrderID.Text, @"^\D*$"))  
            {  
               //Show message and clear input.  
                MessageBox.Show("Please specify integers only.");  
                txtOrderID.Clear();  
                return false;  
            }  
            else  
            {  
                //Convert the text in the text box to an integer to send to the database.  
                parsedOrderID = Int32.Parse(txtOrderID.Text);  
                return true;  
            }  
        }  
  
        //Close the form.  
        private void btnFinishUpdates_Click(object sender, EventArgs e)  
        {  
            this.Close();  
        }  
    }  
}  
Imports System  
Imports System.Collections.Generic  
Imports System.ComponentModel  
Imports System.Data  
Imports System.Drawing  
Imports System.Linq  
Imports System.Text  
Imports System.Threading.Tasks  
Imports System.Windows.Forms  
' FC-1 More namespaces.  
Imports System.Text.RegularExpressions  
Imports System.Data.SqlClient  
Imports System.Configuration  
  
Namespace SimpleDataApp  
    Partial Public Class FillOrCancel  
        Inherits Form  
        ' FC-2 Storage for OrderID  
        Private parsedOrderID As Integer  
  
        ' FC-3 Specify a connection string  
        Private connstr As String = SimpleDataApp.Utility.GetConnectionString()  
  
        Public Sub New()  
            InitializeComponent()  
        End Sub  
  
        ' FC-4 Find an order.  
        Private Sub btnFindByOrderID_Click() Handles btnFindByOrderID.Click  
  
            ' FC-5 Prepare the connection and the command.  
  
            If isOrderID() Then  
                ' Create the connection.  
                Dim conn As New SqlConnection(connstr)  
  
                ' Define the query string that has a parameter for orderID.  
                Dim sql As String = "select * from Sales.Orders where orderID = @orderID"  
  
                ' Create a SqlCommand object.  
                Dim cmdOrderID As New SqlCommand(sql, conn)  
  
                ' Define the @orderID parameter and its value.  
                cmdOrderID.Parameters.Add(New SqlParameter("@orderID", SqlDbType.Int))  
                cmdOrderID.Parameters("@orderID").Value = parsedOrderID  
  
                ' try-catch-finally  
                Try  
                    ' FC-6 Run the command and display the results.  
                    ' Open connection.  
                    conn.Open()  
  
                    ' Run the command by using SqlDataReader.  
                    Dim rdr As SqlDataReader = cmdOrderID.ExecuteReader()  
  
                    ' Create a data table to hold the retrieved data.  
                    Dim dataTable As New DataTable()  
  
                    ' Load the data from the SqlDataReader into the data table.  
                    dataTable.Load(rdr)  
  
                    ' Display the data from the data table in the datagridview.  
                    Me.dgvCustomerOrders.DataSource = dataTable  
  
                    ' Close the SqlDataReader.  
                    rdr.Close()  
                Catch  
                    ' A simple catch.  
                    MessageBox.Show("The requested order could not be loaded into the form.")  
                Finally  
                    ' Close the connection.  
                    conn.Close()  
                End Try  
            End If  
        End Sub  
  
        ' FC-7 Cancel an order.  
        Private Sub btnCancelOrder_Click() Handles btnCancelOrder.Click  
  
            ' Set up and run stored procedure only if OrderID is ready.  
            If isOrderID() Then  
  
                ' Create the connection.  
                Dim conn As New SqlConnection(connstr)  
  
                ' Create the command and identify it as a stored procedure.  
                Dim cmdCancelOrder As New SqlCommand("Sales.uspCancelOrder", conn)  
                cmdCancelOrder.CommandType = CommandType.StoredProcedure  
  
                ' Add input parameter from the stored procedure.  
                cmdCancelOrder.Parameters.Add(New SqlParameter("@orderID", SqlDbType.Int))  
                cmdCancelOrder.Parameters("@orderID").Value = parsedOrderID  
  
                ' try-catch-finally  
                Try  
                    ' Open the connection.  
                    conn.Open()  
  
                    ' Run the cmdCancelOrder command.  
                    cmdCancelOrder.ExecuteNonQuery()  
                Catch  
                    ' A simple catch.  
                    MessageBox.Show("The cancel operation was not completed.")  
                Finally  
                    ' Close connection.  
                    conn.Close()  
                End Try  
            End If  
        End Sub  
  
        ' FC-8 Fill an order.  
        Private Sub btnFillOrder_Click() Handles btnFillOrder.Click  
  
            ' Set up and run stored procedure only if OrderID is ready.  
            If isOrderID() Then  
  
                ' Create the connection.  
                Dim conn As New SqlConnection(connstr)  
  
                ' Create command and identify it as a stored procedure.  
                Dim cmdFillOrder As New SqlCommand("Sales.uspFillOrder", conn)  
                cmdFillOrder.CommandType = CommandType.StoredProcedure  
  
                ' Add input parameter from the stored procedure.  
                cmdFillOrder.Parameters.Add(New SqlParameter("@orderID", SqlDbType.Int))  
                cmdFillOrder.Parameters("@orderID").Value = parsedOrderID  
  
                ' Add second input parameter.  
                cmdFillOrder.Parameters.Add(New SqlParameter("@FilledDate", SqlDbType.DateTime, 8))  
                cmdFillOrder.Parameters("@FilledDate").Value = dtpFillDate.Value  
  
                ' try-catch-finally  
                Try  
                    ' Open the connection.  
                    conn.Open()  
  
                    ' Run the cmdFillOrder command.   
                    cmdFillOrder.ExecuteNonQuery()  
                Catch  
                    ' A simple catch.  
                    MessageBox.Show("The fill operation was not completed.")  
                Finally  
                    ' Close the connection.  
                    conn.Close()  
                End Try  
            End If  
        End Sub  
  
        ' FC-9 Verify that OrderID is ready.  
        Private Function isOrderID() As Boolean  
  
            ' Check for input in the Order ID text box.  
            If txtOrderID.Text = "" Then  
                MessageBox.Show("Please specify the Order ID.")  
                Return False  
  
                ' Check for characters other than integers.  
            ElseIf Regex.IsMatch(txtOrderID.Text, "^\D*$") Then  
  
                ' Show message and clear input.  
                MessageBox.Show("Please specify integers only.")  
                txtOrderID.Clear()  
                Return False  
  
            Else  
                ' Convert the text in the text box to an integer to send to the database.  
                parsedOrderID = Int32.Parse(txtOrderID.Text)  
                Return True  
  
            End If  
        End Function  
  
        ' Close the form.  
        Private Sub btnFinishUpdates_Click() Handles btnFinishUpdates.Click  
            Me.Close()  
        End Sub  
    End Class  
End Namespace  
Komentář Popis
FC-1 Přidání System.Data.SqlClient, System.Configuration a System.Text.RegularExpressions seznam obory názvů.
FC-2 Deklarovat parsedOrderID proměnné.
FC-3 Volání GetConnectionString Metoda získat připojovací řetězec ze souboru config aplikace a ukládají hodnotu v connstr proměnné řetězce.
FC-4 Přidejte kód do obslužné rutiny události kliknutí pro btnFindOrderByID.
FC-5 Oblast známých? Tyto úlohy je nutné, než spustíte příkaz SQL nebo uloženou proceduru.

- Vytvořte objekt SqlConnection.
- Zadejte příkaz jazyka SQL nebo zadejte název uložené procedury. (V takovém případě budete spustit SELECT příkaz.)
- Vytvoření SqlCommand objektu.
- Definujte všechny parametry pro příkaz SQL nebo uloženou proceduru.
FC-6 Tento kód používá SqlDataReader a DataTable k načtení a zobrazení výsledků dotazu.

- Otevření připojení.
- Vytvořit SqlDataReader, rdr, spuštěním cmdOrderID's ExecuteReader Metoda.
- Vytvoření DataTable objekt k uchování načtená data.
- Načítání dat z SqlDataReader do DataTable objektu.
- Zobrazení dat v ovládacím prvku datagridview zadáním DataTable jako DataSource ovládacího prvku DataGridView.
- Zavřete SqlDataReader.
FC-7 Přidejte kód do obslužné rutiny události kliknutí pro btnCancelOrder. Tento kód se spustí Sales.uspCancelOrder uložené procedury.
FC-8 Přidejte kód do obslužné rutiny události kliknutí pro btnFillOrder. Tento kód se spustí Sales.uspFillOrder uložené procedury.
FC-9 Vytvoření metody a ověřte, zda OrderID je připravena k odeslání jako parametr SqlCommand objektu.

- Ujistěte se, že bylo zadáno ID v txtOrderID.
- Použití Regex.IsMatch k definování jednoduchý kontroly pro znaky celé číslo.
- Je deklarován parsedOrderID proměnné na FC-2.
- Pokud je platný vstup, text převést na celé číslo a ukládají hodnotu v parsedOrderID proměnné.
- Zalomení isOrderID Metoda kolem btnFindByOrderID, btnCancelOrder, a btnFillOrder obslužné rutiny události kliknutí.

Otestujte aplikaci

Stiskněte klávesu F5 pro vytvoření a testování vaší aplikace po kódu každou obslužnou rutinu události kliknutí a potom po dokončení kódování.