Scheduler for Silverlight Tutorials > Creating a Multi-User Schedule > Step 1 of 4: Creating the Application |
In this step, you will create a new Silverlight application, add the appropriate references and namespaces, and add two code files and a Data Service to the application.
Follow these steps:
Visual Basic |
Copy Code
|
---|---|
Public Class DataService Inherits System.Web.Services.WebService <WebMethod()> _ Public Function GetData(tables As String) As Byte() ' Create DataSet with connection string Dim ds = GetDataSet() ' Load data into DataSet ds.Fill(tables.Split(","c)) ' Persist to stream Dim ms = New System.IO.MemoryStream() ds.WriteXml(ms, XmlWriteMode.WriteSchema) ' Return stream data Return ms.ToArray() End Function <WebMethod()> _ Public Function UpdateData(dtAdded As Byte(), dtModified As Byte(), dtDeleted As Byte()) As String Try UpdateData(dtAdded, DataRowState.Added) UpdateData(dtModified, DataRowState.Modified) UpdateData(dtDeleted, DataRowState.Deleted) Return Nothing Catch x As Exception Return x.Message End Try End Function Private Sub UpdateData(data As Byte(), state As DataRowState) ' No changes, no work If data Is Nothing Then Return End If ' Load data into dataset Dim ds = GetDataSet() Dim ms = New MemoryStream(data) ds.ReadXml(ms) ds.AcceptChanges() ' Update row states with changes For Each dt As DataTable In ds.Tables For Each dr As DataRow In dt.Rows Select Case state Case DataRowState.Added dr.SetAdded() Exit Select Case DataRowState.Modified dr.SetModified() Exit Select Case DataRowState.Deleted dr.Delete() Exit Select End Select Next Next ' Update the database ds.Update() End Sub Private Function GetDataSet() As SmartDataSet ' Get physical location of the mdb file Dim mdb As String = Path.Combine(Context.Request.PhysicalApplicationPath, "App_Data\Nwind.mdb") ' Check that the file exists If Not File.Exists(mdb) Then Dim msg As String = String.Format("Cannot find database file {0}.", mdb) Throw New FileNotFoundException(msg) End If ' Make sure file is not read-only (source control often does this...) Dim att As FileAttributes = File.GetAttributes(mdb) If (att And FileAttributes.[ReadOnly]) <> 0 Then att = att And Not FileAttributes.[ReadOnly] File.SetAttributes(mdb, att) End If ' Create and initialize the SmartDataSet Dim dataSet = New SmartDataSet() dataSet.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & mdb ' sample connection string for SQL Server Express (replace Initial Catalog value by the valid catalog name) ' dataSet.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=test;Data Source=.\\SQLEXPRESS"; Return dataSet End Function End Class |
C# |
Copy Code
|
---|---|
public class DataService : System.Web.Services.WebService { [WebMethod] public byte[] GetData(string tables) { // Create DataSet with connection string var ds = GetDataSet(); // Load data into DataSet ds.Fill(tables.Split(',')); // Persist to stream var ms = new System.IO.MemoryStream(); ds.WriteXml(ms, XmlWriteMode.WriteSchema); // Return stream data return ms.ToArray(); } [WebMethod] public string UpdateData(byte[] dtAdded, byte[] dtModified, byte[] dtDeleted) { try { UpdateData(dtAdded, DataRowState.Added); UpdateData(dtModified, DataRowState.Modified); UpdateData(dtDeleted, DataRowState.Deleted); return null; } catch (Exception x) { return x.Message; } } void UpdateData(byte[] data, DataRowState state) { // No changes, no work if (data == null) { return; } // Load data into dataset var ds = GetDataSet(); var ms = new MemoryStream(data); ds.ReadXml(ms); ds.AcceptChanges(); // Update row states with changes foreach (DataTable dt in ds.Tables) { foreach (DataRow dr in dt.Rows) { switch (state) { case DataRowState.Added: dr.SetAdded(); break; case DataRowState.Modified: dr.SetModified(); break; case DataRowState.Deleted: dr.Delete(); break; } } } // Update the database ds.Update(); } SmartDataSet GetDataSet() { // Get physical location of the mdb file string mdb = Path.Combine( Context.Request.PhysicalApplicationPath, @"App_Data\Nwind.mdb"); // Check that the file exists if (!File.Exists(mdb)) { string msg = string.Format("Cannot find database file {0}.", mdb); throw new FileNotFoundException(msg); } // Make sure file is not read-only (source control often does this...) FileAttributes att = File.GetAttributes(mdb); if ((att & FileAttributes.ReadOnly) != 0) { att &= ~FileAttributes.ReadOnly; File.SetAttributes(mdb, att); } // Create and initialize the SmartDataSet var dataSet = new SmartDataSet(); dataSet.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" + mdb; // sample connection string for SQL Server Express (replace Initial Catalog value by the valid catalog name) // dataSet.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=test;Data Source=.\\SQLEXPRESS"; return dataSet; } } } |
In this step you created a new Silverlight application, added the appropriate assembly references, and added a service reference and two code files. In the next step you will add XAML to your MultiUser application.