Click here to Skip to main content
11,505,486 members (70,568 online)
Click here to Skip to main content

How to Save and Update Data in Windows Mobile using the Emulator and Retrieve them Back

, 5 Jan 2009 CPOL 23K 393 20
Rate this:
Please Sign up or sign in to vote.
This article shows you how you can get your saved data once you closed the Windows mobile emulator.

Introduction

Many people ask me how we can insert data in SQL Server Compact Edition (CE) database. Actually they had written the code and until they close the emulator, they have those modified/inserted data, but as soon as they close the emulator the data is not reflected in the CE database. They are wondering, "How can that be possible?"

Background

Let’s take a simple example so you can understand the basic concept of what happens behind the scenes:

  1. You developed software which uses a Microsoft Access database file to store data and the db is deployed in the machine where you installed the software.
  2. Now you installed the software in Machine A and B.
  3. When you run the software in Machine A, you made some changes in the db using software.
  4. Now you closed your software of Machine A, now tell me are the changes made in db of A effected in machine B? Obviously not, here you are.

As compared to the above scenario, when you run your mobile application and it's open in emulator, then both the OS and the emulator are two different machines. Your CE db of OS is totally different from your emulator CE db, so whatever you changed in your emulator db is not getting reflected in your OS.

For example, when you deploy your application in Windows mobile and when you modify the data, the modified data is displayed in mobile not in the OS where you developed that application.

Using the Code

One way I know to do it is by sharing the storage card of Mobile application and pasting the modified db of CE into that shared directory and reusing it.

  1. Create one Windows mobile application named SampleMobileApplication.

SampleMobileApplication/img1.PNG

  1. Select the “SampleMobileApplication” project and press right mouse button to open property and change the Output File folder path:

SampleMobileApplication/img2.PNG

  1. Create one CE db Emp with two columns ID and Name.

SampleMobileApplication/img3.PNG

  1. Add one form with two buttons Get Employees and Add New:

SampleMobileApplication/img4.PNG

  1. Add the following code in the Show Data form:
Imports System.Data
Imports System.Data.SqlServerCe
Imports System.IO

Public Class frmEmp

    Private Sub btnGetEmployees_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles btnGetEmployees.Click
        GetTableData()
    End Sub
    Private Sub GetTableData()
        Dim conn As SqlCeConnection = Nothing
        Try
            btnGetEmployees.Enabled = False
            conn = New SqlCeConnection("Data Source = _
		\Program Files\SampleMobileApplication\mydatabase.sdf;")
            conn.Open()
            Dim cmd As SqlCeCommand = conn.CreateCommand()
            Dim dAdp As SqlCeDataAdapter = New SqlCeDataAdapter()
            Dim ds As New DataSet
            cmd.CommandText = "SELECT * FROM EMP"
            dAdp.SelectCommand = cmd
            cmd.ExecuteReader()
            dAdp.Fill(ds)
            dgEmp.DataSource = ds.Tables(0)
        Catch ex As Exception
        Finally
            conn.Close()
            btnGetEmployees.Enabled = True
        End Try
    End Sub

    Private Sub btnAddNew_Click(ByVal sender As System.Object, _
		ByVal e As System.EventArgs) Handles btnAddNew.Click
        Dim frmAddNewEmp As New frmAddEmp
        frmAddNewEmp.Show()
    End Sub
End Class
  1. Add another form for adding new employee:

SampleMobileApplication/img5.PNG

  1. Add the following code in the new employee:
Imports System.Data
Imports System.Data.SqlServerCe
Imports System.IO

Public Class frmAddEmp
    Private Sub btnBack_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles btnBack.Click
        Me.Close()
    End Sub

    Private Sub btnSave_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles btnSave.Click
        If txtID.Text.Trim.Equals(String.Empty) Then
            MessageBox.Show("Please enter three digit employee ID.", Me.Text)
        ElseIf txtName.Text.Trim.Equals(String.Empty) Then
            MessageBox.Show("Please enter employee name.", Me.Text)
        ElseIf txtID.Text.Length > 3 Then
            MessageBox.Show("Invalid employee ID length, _
		only 3 digits are supported.", Me.Text)
        ElseIf txtName.Text.Length > 255 Then
            MessageBox.Show("Invalid employee name length, _
		only 255 character are supported.", Me.Text)
        Else
            Dim conn As SqlCeConnection = Nothing
            Try
                conn = New SqlCeConnection("Data Source = _
		\Program Files\SampleMobileApplication\mydatabase.sdf;")
                conn.Open()
                Dim cmd As SqlCeCommand = conn.CreateCommand()
                Dim dAdp As SqlCeDataAdapter = New SqlCeDataAdapter()
                Dim ds As New DataSet
                cmd.CommandText = String.Format("INSERT INTO EMP(ID, _
		[NAME]) VALUES ('{0}','{1}')", txtID.Text, txtName.Text)
                dAdp.InsertCommand = cmd
                cmd.ExecuteNonQuery()
                MessageBox.Show("Saved Successfully.", Me.Text)
                txtID.Text = String.Empty
                txtName.Text = String.Empty
                txtID.Focus()
            Catch ex As Exception
                MessageBox.Show(ex.Message, Me.Text)
            Finally
                conn.Close()
            End Try
        End If

    End Sub

End Class
  1. Run the application and click File -> Configure.

SampleMobileApplication/img6.PNG

  1. Define the Shared folder in Emulator Property dialog box as shown below:

SampleMobileApplication/img7.PNG

  1. Now start the “SampleMobileApplication” and click the Get Employees button.

SampleMobileApplication/img8.PNG

  1. Now click the Add New button and enter the information and click the save button.

SampleMobileApplication/img9.PNG

  1. Now click the Back button then click the Get Employees button.

SampleMobileApplication/img10.PNG

  1. You will see that “Albert” is added and displayed in the grid. Now close the application by clicking close button of Form.

SampleMobileApplication/img11.PNG

  1. Now by using Up and Down arrow select myDatabase and copy the db by clicking the menu button of Pocket PC as shown below:

SampleMobileApplication/img12.PNG

  1. Now open the storage card and paste the db file.

SampleMobileApplication/img13.PNG

  1. Refresh the Storage card by going one directory up and back in storage card to see myDatabase file.
  1. Now close the emulator and open myDatabase from E:\Test or whatever directory path you specified for storage card and you see that the new entry is reflected in the Emp table.
  1. Run the application again and you found that the new entry is not reflected. Close the emulator again and now copy that DB from your E:\Test folder and paste it in under the SampleMobileApplication directory and now run the application again and you find that the entry is reflected.

History

  • 6th January, 2009: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

sun1programmer
Team Leader IBM India Pvt. Ltd. Pune
India India
Work in Windows Forms, ASP.NET 2.0, 3.5, Portal Managements using DotNetNuke 4x., Rainbow, Windows Mobile Apllication. Having good knowledge of OOPs. Leading the team and using the cutting edge technologies for designing core components of application.

Having MCPD in Web Developement, MCITP Database Developer, MCTS in .NET 2.0: Web Application and SQL Server 2005.

Having good knowledge of Crystal Report 8.5 onwards.

Comments and Discussions

 
GeneralMy vote of 4 Pin
Rajesh.Girbal30-Sep-10 20:42
memberRajesh.Girbal30-Sep-10 20:42 
GeneralNice Article. but one more Question!! Pin
Virani20-Jan-10 18:36
memberVirani20-Jan-10 18:36 
GeneralRe: Nice Article. but one more Question!! Pin
sun1programmer21-Jan-10 1:51
membersun1programmer21-Jan-10 1:51 
Generalproblem feeding data into database Pin
christy420071-Mar-09 4:47
memberchristy420071-Mar-09 4:47 
Generalgreat article Pin
micheal_safian2-Feb-09 6:27
membermicheal_safian2-Feb-09 6:27 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.150520.1 | Last Updated 6 Jan 2009
Article Copyright 2009 by sun1programmer
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid