Usar um banco de dados do SQL Server em um aplicativo UWPUse a SQL Server database in a UWP app

Seu aplicativo pode se conectar diretamente a um banco de dados do SQL Server e, em seguida, armazenar e recuperar dados usando classes no namespace System.Data.SqlClient.Your app can connect directly to a SQL Server database and then store and retrieve data by using classes in the System.Data.SqlClient namespace.

Neste guia, mostraremos uma maneira de fazer isso.In this guide, we'll show you one way to do that. Se você instalar o banco de dados de exemplo Northwind em sua instância do SQL Server e, então, usar esses snippets, terá uma interface do usuário básica que mostra os produtos do banco de dados de exemplo Northwind.If you install the Northwind sample database onto your SQL Server instance, and then use these snippets, you'll end up with a basic UI that shows products from the Northwind sample database.

Produtos Northwind

Os snippets que aparecem neste guia baseiam-se neste exemplo mais completo.The snippets that appear in this guide are based on this more complete sample.

Primeiro, configure sua soluçãoFirst, set up your solution

Para conectar seu aplicativo diretamente a um banco de dados do SQL Server, certifique-se de que a versão mínima do seu projeto tem como alvo a atualização Fall Creators.To connect your app directly to a SQL Server database, make sure that the minimum version of your project targets the Fall Creators update. Essas informações estão na página de propriedades do seu projeto da UWP.You can find that information in the properties page of your UWP project.

Versão mínima do SDK do Windows

Abra o arquivo Package.appxmanifest do seu projeto UWP no designer de manifesto.Open the Package.appxmanifest file of your UWP project in the manifest designer.

Na guia Recursos, marque a caixa de seleção Autenticação de Empresa se estiver usando a Autenticação do Windows para autenticar o seu SQL Server.In the Capabilities tab, select the Enterprise Authentication checkbox if you are using Windows Authentication for authenticating your SQL Server.

Recurso Autenticação de Empresa

Importante

Você também precisará selecionar Internet (Cliente e Servidor) , Internet (Cliente) e Redes Privadas (Cliente e Servidor) , independentemente de você estar usando a Autenticação do Windows ou não.You will also need to select Internet (Client & Server), Internet (Client), and Private Networks (Client & Server), regardless of whether or not you're using Windows Authentication.

Adicionar e recuperar dados em um banco de dados do SQL ServerAdd and retrieve data in a SQL Server database

Nesta seção, faremos o seguinte:In this section, we'll do these things:

1️⃣ Adicionar uma cadeia de caracteres de conexão.Add a connection string.

2️⃣ Criar uma classe para armazenar dados do produto.Create a class to hold product data.

3️⃣ Recuperar produtos do banco de dados do SQL Server.Retrieve products from the SQL Server database.

4️⃣ Adicionar uma interface do usuário básica.Add a basic user interface.

5️⃣ Preencher a interface do usuário com produtos.Populate the UI with Products.

Observação

Esta seção ilustra uma maneira de organizar seu código de acesso a dados.This section illustrates one way to organize your data access code. Ele deve apenas fornecer um exemplo de como é possível usar o System.Data.SqlClient para armazenar e recuperar dados de um banco de dados do SQL Server.It's meant only to provide an example of how you can use System.Data.SqlClient to store and retrieve data from a SQL Server database. Você pode organizar seu código de qualquer maneira que faça mais sentido para o design do seu aplicativo.You can organize your code in any way that makes the most sense to your application's design.

Adicionar uma cadeia de caracteres de conexãoAdd a connection string

No arquivo App.xaml.cs, adicione uma propriedade para a classe App, que dá acesso a outras classes em sua solução na cadeia de caracteres de conexão.In the App.xaml.cs file, add a property to the App class, that gives other classes in your solution access to the connection string.

Nossos pontos de cadeia de caracteres de conexão para o banco de dados Northwind em uma instância do SQL Server Express.Our connection string points to the Northwind database in a SQL Server Express instance.

sealed partial class App : Application
{
    // Connection string for using Windows Authentication.
    private string connectionString =
        @"Data Source=YourServerName\SQLEXPRESS;Initial Catalog=NORTHWIND;Integrated Security=SSPI";

    // This is an example connection string for using SQL Server Authentication.
    // private string connectionString =
    //     @"Data Source=YourServerName\YourInstanceName;Initial Catalog=DatabaseName; User Id=XXXXX; Password=XXXXX";

    public string ConnectionString { get => connectionString; set => connectionString = value; }

    ...
}

Criar uma classe para armazenar dados do produtoCreate a class to hold product data

Vamos criar uma classe que implementa o evento INotifyPropertyChanged para que possamos associar os atributos em nossa interface do usuário XAML às propriedades nessa classe.We'll create a class that implements the INotifyPropertyChanged event so that we can bind attributes in our XAML UI to the properties in this class.

public class Product : INotifyPropertyChanged
{
    public int ProductID { get; set; }
    public string ProductCode { get { return ProductID.ToString(); } }
    public string ProductName { get; set; }
    public string QuantityPerUnit { get; set; }
    public decimal UnitPrice { get; set; }
    public string UnitPriceString { get { return UnitPrice.ToString("######.00"); } }
    public int UnitsInStock { get; set; }
    public string UnitsInStockString { get { return UnitsInStock.ToString("#####0"); } }
    public int CategoryId { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

}

Recuperar produtos do banco de dados do SQL ServerRetrieve products from the SQL Server database

Crie um método que obtenha produtos do banco de dados Northwind e, em seguida, os devolva como uma coleção ObservableCollection de instâncias de Product.Create a method that gets products from the Northwind sample database, and then returns them as an ObservableCollection collection of Product instances.

public ObservableCollection<Product> GetProducts(string connectionString)
{
    const string GetProductsQuery = "select ProductID, ProductName, QuantityPerUnit," +
       " UnitPrice, UnitsInStock, Products.CategoryID " +
       " from Products inner join Categories on Products.CategoryID = Categories.CategoryID " +
       " where Discontinued = 0";

    var products = new ObservableCollection<Product>();
    try
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();
            if (conn.State == System.Data.ConnectionState.Open)
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = GetProductsQuery;
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var product = new Product();
                            product.ProductID = reader.GetInt32(0);
                            product.ProductName = reader.GetString(1);
                            product.QuantityPerUnit = reader.GetString(2);
                            product.UnitPrice = reader.GetDecimal(3);
                            product.UnitsInStock = reader.GetInt16(4);
                            product.CategoryId = reader.GetInt32(5);
                            products.Add(product);
                        }
                    }
                }
            }
        }
        return products;
    }
    catch (Exception eSql)
    {
        Debug.WriteLine("Exception: " + eSql.Message);
    }
    return null;
}

Adicionar uma interface do usuário básicaAdd a basic user interface

Adicione o seguinte XAML ao arquivo MainPage.xaml do projeto UWP.Add the following XAML to the MainPage.xaml file of the UWP project.

Este XAML cria uma ListView para mostrar cada produto retornado no snippet anterior e associar os atributos de cada linha na ListView às propriedades que definimos na classe Product.This XAML creates a ListView to show each product that you returned in the previous snippet, and binds the attributes of each row in the ListView to the properties that we defined in the Product class.

<Grid Background="{ThemeResource SystemControlAcrylicWindowBrush}">
    <RelativePanel>
        <ListView Name="InventoryList"
                  SelectionMode="Single"
                  ScrollViewer.VerticalScrollBarVisibility="Auto"
                  ScrollViewer.IsVerticalRailEnabled="True"
                  ScrollViewer.VerticalScrollMode="Enabled"
                  ScrollViewer.HorizontalScrollMode="Enabled"
                  ScrollViewer.HorizontalScrollBarVisibility="Auto"
                  ScrollViewer.IsHorizontalRailEnabled="True"
                  Margin="20">
            <ListView.HeaderTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal"  >
                        <TextBlock Text="ID" Margin="8,0" Width="50" Foreground="DarkRed" />
                        <TextBlock Text="Product description" Width="300" Foreground="DarkRed" />
                        <TextBlock Text="Packaging" Width="200" Foreground="DarkRed" />
                        <TextBlock Text="Price" Width="80" Foreground="DarkRed" />
                        <TextBlock Text="In stock" Width="80" Foreground="DarkRed" />
                    </StackPanel>
                </DataTemplate>
            </ListView.HeaderTemplate>
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="local:Product">
                    <StackPanel Orientation="Horizontal" >
                        <TextBlock Name="ItemId"
                                    Text="{x:Bind ProductCode}"
                                    Width="50" />
                        <TextBlock Name="ItemName"
                                    Text="{x:Bind ProductName}"
                                    Width="300" />
                        <TextBlock Text="{x:Bind QuantityPerUnit}"
                                   Width="200" />
                        <TextBlock Text="{x:Bind UnitPriceString}"
                                   Width="80" />
                        <TextBlock Text="{x:Bind UnitsInStockString}"
                                   Width="80" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </RelativePanel>
</Grid>

Mostrar produtos na ListViewShow products in the ListView

Abra o arquivo MainPage.xaml.cs e adicione o código ao construtor da classe MainPage que define a propriedade ItemSource da ListView como a ObservableCollection das instâncias de Product.Open the MainPage.xaml.cs file, and add code to the constructor of the MainPage class that sets the ItemSource property of the ListView to the ObservableCollection of Product instances.

public MainPage()
{
    this.InitializeComponent();
    InventoryList.ItemsSource = GetProducts((App.Current as App).ConnectionString);
}

Inicie o projeto e veja os produtos do banco de dados de exemplo Northwind aparecerem na interface do usuário.Start the project and see products from the Northwind sample database appear in the UI.

Produtos Northwind

Explore o namespace System.Data.SqlClient para ver o que mais você pode fazer com os dados em seu banco de dados do SQL Server.Explore the System.Data.SqlClient namespace to see what other things you can do with data in your SQL Server database.

Problemas para se conectar ao seu banco de dados?Trouble connecting to your database?

Na maioria dos casos, alguns aspectos da configuração do SQL Server precisam ser alterados.In most cases, some aspect of the SQL Server configuration needs to be changed. Se conseguir se conectar ao seu banco de dados de outro tipo de aplicativo para área de trabalho, como um aplicativo Windows Forms ou WPF, certifique-se de habilitar o TCP/IP para SQL Server.If you're able to connect to your database from another type of desktop application such as a Windows Forms or WPF application, ensure that you've enabled TCP/IP for SQL Server. Faça isso no console de Gerenciamento do computador.You can do that in the Computer Management console.

Gerenciamento do Computador

Em seguida, certifique-se de que o serviço SQL Server Browser está em execução.Then, make sure that your SQL Server Browser service is running.

Serviço SQL Server Browser

Próximas etapasNext steps

Usar um banco de dados leve para armazenar dados no dispositivo dos usuáriosUse a light-weight database to store data on the users device

Confira Usar um banco de dados do SQLite em um aplicativo UWP.See Use a SQLite database in a UWP app.

Compartilhar código entre aplicativos diferentes em diferentes plataformasShare code between different apps across different platforms

Confira Compartilhar código entre a área de trabalho e a UWP.See Share code between desktop and UWP.

Adicionar páginas de detalhes mestre com back-ends do Azure SQLAdd master detail pages with Azure SQL back ends

Confira Exemplo de banco de dados de pedidos do cliente.See Customer Orders Database sample.