I am writing this Blog because of one reason. Many people have a question about accessing the data in Silverlight applications without LINQ, LINQ-To-SQL Or EDM (Entity Data Model).
The answer for this question is “Yes, You can!!”. So, to achieve this, there can be multiple ways. I have achieved this by my way.
So, let’s start looking at the Steps-
1) Create a Silverlight project using VS 2008/ VS 2010 and name it as “SLWithoutLINQ”.
2) Design the Page.xaml as per your specifications. I have taken only a single button which will give a call to WCF Service method and that method will return a collection of class called “Students”.
Page.xaml-
<UserControl x:Class="SL3WithoutLINQ.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="Black">
<Button x:Name="btnShowResult" Content="Show Result" Click="btnShowResult_Click" Height="100" Width="200"/>
</Grid>
</UserControl>
3) My database description is as below-
Database Name – Sample.
Table Name – Test.
Table structure -
| Field Name | Data Type |
| InstID | Int |
| StudID | Int |
| Subject | Varchar(50) |
| Result | Varchar(50) |
| FailedReason | Varchar(50) |
4) Now, let’s add a class in our web site or web application with name “Students” as shown below-
public class Students
{
public int InstanceID { get; set; }
public int StudentID { get; set; }
public string Subject { get; set; }
public string Result { get; set; }
public string FailedReason { get; set; }
}
5) Now, let’s add a simple WCF Service by the name “FetchResults” and write a code as below(Once you add a WCF Service, you will get an Interface and a class which implements that Interface)-
Interface-
[ServiceContract]
public interface IFetchResults
{
[OperationContract]
List<Students> FetchStudentResult();
}
Class-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Data;
using System.Data.SqlClient;
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "FetchResults" in code, svc and config file together.
public class FetchResults : IFetchResults
{
public List<Students> FetchStudentResult()
{
SqlConnection CN = new SqlConnection(@"Server=.\SQLExpress;Database=Sample;Integrated Security=true");
SqlCommand CMD = new SqlCommand("Select * from Test",CN);
CN.Open();
SqlDataReader DR = CMD.ExecuteReader();
List<Students> result=new List<Students>();
while (DR.Read())
{
result.Add(new Students() {StudentID=int.Parse(DR[1].ToString
()),InstanceID=int.Parse(DR[0].ToString()),Subject=DR[2].ToString(),Result=DR[3].ToString
(),FailedReason=DR[4].ToString() });
}
return result;
}
}
6) Now once you finish your service code, Now the most important thing is change the Web.Config file.
So, When you add a WCF Service, it by default gives binding as wsHttpBinding. Silverlight supports only basicHttpBinding.
So, change it as below-
<endpoint address="" binding="basicHttpBinding" contract="IFetchResults">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
7) The method “FetchStudentResult” returns a collection of “Students” class. Now let’s move to out next step.
8) Now add a WCF Service reference to your Silverlight project. and create a proxy of a class “FetchResultsClient” as shown below-
List<StudentProxy.Students> studCollection;
private void btnShowResult_Click(object sender, RoutedEventArgs e)
{
StudentProxy.FetchResultsClient proxy = new
SL3WithoutLINQ.StudentProxy.FetchResultsClient();
proxy.FetchStudentResultCompleted += new
EventHandler<SL3WithoutLINQ.StudentProxy.FetchStudentResultCompletedEventArgs>
(proxy_FetchStudentResultCompleted);
proxy.FetchStudentResultAsync();
}
void proxy_FetchStudentResultCompleted(object sender,
SL3WithoutLINQ.StudentProxy.FetchStudentResultCompletedEventArgs e)
{
studCollection = e.Result.ToList();
}
9) Now put a break point on “proxy_FetchStudentResultCompleted” method. and run your
application. Click the button “Show Result”. and when the break point is invoked, you will
see the no. of instances in the studCollection as shown below-


In the above result, I have six rows return from the table called “Test”. Now you can use this collection as a data context for any control !!
10) So, That’s all !! Enjoy.
application. Click the button “Show Result”. and when the break point is invoked, you will
see the no. of instances in the studCollection as shown below-

In the above result, I have six rows return from the table called “Test”. Now you can use this collection as a data context for any control !!
10) So, That’s all !! Enjoy.

Join the conversation! Your thoughts help the community grow.