Skip to main content
Email Password   helpLost your password?

Introduction

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

Background

Let’s take a simple example so you can understand the basic concept what happen behind the scene:

  1. You developed software which uses MS Access db 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 did the changes made in db of A are effected in machine B? Obviously not, here you are.

As compare to the above scenario when you run your mobile application and its open in emulator, then both the OS and the emulator is 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 is 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 do it is by sharing the storage card of Mobile application and paste the modified db of CE into that shared directory and reuse it.

  1. Create one windows mobile application named SampleMobileApplication.

img1.PNG

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

img2.PNG

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

img3.PNG

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

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

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.

img6.PNG

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

img7.PNG

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

img8.PNG

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

img9.PNG

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

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.

img11.PNG

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

img12.PNG

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

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 the 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 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 found that the entry is reflected.
You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
Generalproblem feeding data into database Pin
christy42007
5:47 1 Mar '09  
Generalgreat article Pin
micheal_safian
7:27 2 Feb '09  


Last Updated 6 Jan 2009 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2009