Introduction

Today we are describing how to connect Windows Store apps to a SQL Server database using Windows Services. As we know, there is not an option in Windows Store apps to directly connect to a SQL Server database. So if you want to create a connection between Windows Store apps to SQL Server then you must use Windows Services.

This application connects a Windows Store app to a SQL Server database using WCF Services throough a Windows Service so no one can see the connection or no end user can easily close the service. That's why it is a better way than connecting the Windows Store apps to a Desktop application and the Desktop application does the database part. In this application we are using a database named "EmpDatabase" and a table named "EmployeeTable". In the EmployeeTable there are three fields, Id, Name and Address.

Step 1

Open Visual Studio 2012 and create a new project called "WCF Services library".

Step 2

In this step add the database you want to use in your application using "ADO.NET Entity data model". To do that right-click on your services application in Solution Explorer and select "Add new item". Whatever table you are using in the application, must have a primary key.

New-EDM-Windows-Store-Apps.jpg

Step 3

After adding an entity model your database table will be as follows:

Emp-Model-Windows-Store-Apps.jpg

Step 4

Go to the "IService.cs" page and replace all the code with the following code. In this page we declared the services interface.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

namespace WindowsService1

{

[ServiceContract]

public interface IService1

{

[OperationContract]

bool InsertEmployee(Employee EmpInsert);

[OperationContract]

List<Employee> GetEmployee();

}

[DataContract]

public class Employee

{

private string id;

private string name;

private string address;

[DataMember]

public string EmpId

{

get { return id; }

set { id = value; }

}

[DataMember]

public string EmpName

{

get { return name; }

set { name = value; }

}

[DataMember]

public string EmpAddress

{

get { return address; }

set { address = value; }

}

}

}

Step 5

In "Service.cs" page replace all code with following code. In this page we declared services method.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

namespace WindowsService1

{

public class Service1 : IService1

{

public bool InsertEmployee(Employee EmpInsert)

{

EmpDatabaseEntities EmpData = new EmpDatabaseEntities();

EmployeeTable NewEmp = new EmployeeTable();

NewEmp.Id = EmpInsert.EmpId;

NewEmp.Name = EmpInsert.EmpName;

NewEmp.Address = EmpInsert.EmpAddress;

EmpData.EmployeeTables.Add(NewEmp);

EmpData.SaveChanges();

return true;

}

public List<Employee> GetEmployee()

{

var Emplist = new List<Employee>();

EmpDatabaseEntities EmpData=new EmpDatabaseEntities();

foreach (var Emp in EmpData.EmployeeTables.ToList())

{

Employee GetEmp = new Employee();

GetEmp.EmpId = Emp.Id;

GetEmp.EmpName = Emp.Name;

GetEmp.EmpAddress = Emp.Address;

Emplist.Add(GetEmp);

}

return Emplist;

}

}

}

Step 6

After doing that, run WCF services and copy to the services URL.

Copy-Address-Windows-Store-Apps.jpg

Step 7

Now open Visual Studio 2012 in a new window and start a new "Windows Store apps" project.

Step 8

In this step, add a service reference. To do that right-click on the project and in Solution Explorer and select "Add Service Reference". Paste the Service URL and click on "Go". After finding the service click on "OK".

Added-Services-Windows-Store-Apps.jpg

Step 9

Go to Solution Explorer and double-click on "MainPage.xaml". Your "MainPage.xaml" page is as in the following code:

<Page

x:Class="WindowsStoreToSql.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:local="using:WindowsStoreToSql"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

mc:Ignorable="d">

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" RenderTransformOrigin="0.508,0.484">

<TextBox HorizontalAlignment="Left" x:Name="IdTextbox" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Margin="352,249,0,0" Width="246"/>

<TextBox HorizontalAlignment="Left" x:Name="NameTextbox" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Margin="352,303,0,0" Width="246"/>

<TextBox HorizontalAlignment="Left" x:Name="AddTextBox" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Margin="352,358,0,0" Width="246"/>

<Button Content="ShowData" x:Name="ShowData" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="496,422,0,0" Click="ShowData_Click"/>

<Button Content="InsertData" x:Name="InsertData" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="352,422,0,0" Click="InsertData_Click"/>

<GridView HorizontalAlignment="Left" x:Name="EmpGridview" VerticalAlignment="Top" Width="150" Margin="646,162,0,0" />

</Grid>

</Page>

Step 10

Your "MainPage.xaml.cs" page is as in the following code:

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using Windows.Foundation;

using Windows.Foundation.Collections;

using Windows.UI.Xaml;

using Windows.UI.Xaml.Controls;

using Windows.UI.Xaml.Controls.Primitives;

using Windows.UI.Xaml.Data;

using Windows.UI.Xaml.Input;

using Windows.UI.Xaml.Media;

using Windows.UI.Xaml.Navigation;

using Windows.UI.Popups;

namespace WindowsStoreToSql

{

public sealed partial class MainPage : Page

{

ServiceReference1.Service1Client MyService;

public MainPage()

{

this.InitializeComponent();

}

protected override void OnNavigatedTo(NavigationEventArgs e)

{

MyService = new ServiceReference1.Service1Client();

}

private async void InsertData_Click(object sender, RoutedEventArgs e)

{

await MyService.InsertEmployeeAsync(new ServiceReference1.Employee { EmpId = IdTextbox.Text, EmpName = NameTextbox.Text, EmpAddress = AddTextBox.Text });

}

private async void ShowData_Click(object sender, RoutedEventArgs e)

{

var EmpList = await MyService.GetEmployeeAsync();

foreach (var Emp in EmpList)

{

GridViewItem EmpView = new GridViewItem();

StackPanel Spanel = new StackPanel();

Spanel.Children.Add(new TextBlock() { Text = Emp.EmpId });

Spanel.Children.Add(new TextBox() { Text = Emp.EmpName });

Spanel.Children.Add(new TextBlock() { Text = Emp.EmpAddress });

EmpView.Content = Spanel;

EmpGridview.Items.Add(EmpView);

}

}

}

}

Step 11

Now run project. Click on "ShowData" to show your table data and click on "InsertData" to insert data into the table.

Result-Windows8-Store-Apps.jpg