Compartilhar via


Usar um banco de dados do SQL Server em um aplicativo do Windows

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.

Introdução

Neste guia, você aprenderá uma maneira de fazer isso em aplicativos do SDK de Aplicativo do Windows. 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.

Produtos Northwind

Dica

Você também pode obter scripts para criar os bancos de dados de exemplo Northwind e pubs do repositório GitHub de exemplos do SQL Server.

Os snippets que aparecem neste guia baseiam-se no aplicativo UWP de exemplo.

Primeiro, configure sua solução

Para que o aplicativo possa se conectar diretamente a um banco de dados do SQL Server, ele pode utilizar qualquer versão mínima do Windows compatível com o SDK de Aplicativo do Windows. Essas informações estão na página de propriedades do projeto.

  1. Abra o arquivo Package.appxmanifest do projeto do SDK de Aplicativo do Windows no designer de manifesto.
  2. 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.

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.

Adicionar e recuperar dados em um banco de dados do SQL Server

Nesta seção, faremos o seguinte:

1️⃣ Adicionar uma cadeia de conexão.

2️⃣ Criar uma classe para armazenar dados do produto.

3️⃣ Recuperar produtos do banco de dados do SQL Server.

4️⃣ Adicionar uma interface do usuário básico.

5️⃣ Preencher a interface do usuário com produtos.

Observação

Esta seção ilustra uma maneira de organizar seu código de acesso a dados. 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. Você pode organizar seu código de qualquer maneira que faça mais sentido para o design do seu aplicativo.

Adicionar uma cadeia de caracteres de conexão

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.

Nossos pontos de cadeia de caracteres de conexão para o banco de dados Northwind em uma instância do SQL Server Express. A cadeia de conexão neste snippet pressupõe que você manteve o nome SQLEXPRESS da instância padrão ao instalar o SQL Server Express. Você pode fazer alterações na cadeia de conexão para corresponder à instância, ao banco de dados e ao método de autenticação do SQL Server.

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

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

    ...
}

Importante

No caso dos aplicativos de produção, as informações de conexão devem ser armazenadas com segurança na configuração do aplicativo (confira Adicionar a Configuração de Aplicativos do Azure por meio do Visual Studio Connected Services). Cadeias de conexão e outros segredos nunca devem ser codificados.

Criar uma classe para armazenar dados do produto

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.

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 Server

No arquivo MainWindow.xaml.cs do projeto do SDK de Aplicativo do Windows, crie um método que obtenha produtos do banco de dados de exemplo do Northwind e os retorne como uma coleção ObservableCollection de instâncias de Product.

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 (var 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ásica

Adicione o XAML a seguir ao arquivo MainWindow.xaml do projeto do SDK de Aplicativo do Windows.

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.

<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 ListView

Abra o arquivo MainWindow.xaml.cs e adicione o código ao construtor da classe MainWindow que define a propriedade ItemSource da ListView como a ObservableCollection das instâncias de Product.

public MainWindow()
{
    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.

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.

Dica

Tente pedir ajuda ao Microsoft Copilot com suas consultas SQL. O Copilot pode ajudá-lo a escrever consultas SQL e sugerir maneiras de melhorar seu código.

Problemas para se conectar ao seu banco de dados?

Na maioria dos casos, alguns aspectos da configuração do SQL Server precisam ser alterados. 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. Faça isso no console de Gerenciamento do computador. (Confira Ferramentas do Windows/Ferramentas Administrativas para obter mais informações).

Gerenciamento do Computador

Em seguida, certifique-se de que o serviço SQL Server Browser está em execução.

Serviço SQL Server Browser

Próxima etapa