Usar um banco de dados do SQL Server em um aplicativo UWP
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.
Neste guia, mostraremos uma maneira de fazer isso. 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.
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 neste exemplo mais completo.
Primeiro, configure sua solução
Para conectar o aplicativo diretamente a um banco de dados do SQL Server, verifique se a versão mínima do projeto é direcionada ao Windows 10 Fall Creators Update (Build 16299) ou mais recente. Essas informações estão na página de propriedades do seu projeto da UWP.
Abra o arquivo Package.appxmanifest do seu projeto UWP no designer de manifesto.
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.
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
{
// Create a connection string 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 MainPage.xaml.cs do projeto do UWP, crie um método que obtenha produtos do banco de dados de exemplo do Northwind e os devolva como uma coleção ObservableCollection de instâncias 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 seguinte XAML ao arquivo MainPage.xaml do projeto UWP.
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 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
.
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.
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.
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).
Em seguida, certifique-se de que o serviço SQL Server Browser está em execução.
Próximas etapas
Usar um banco de dados leve para armazenar dados no dispositivo dos usuários
Confira Usar um banco de dados do SQLite em um aplicativo UWP.
Compartilhar código entre aplicativos diferentes em várias plataformas
Confira Compartilhar código entre a área de trabalho e a UWP.