Microsoft® SQL Server™ 2000 Windows® CE Edition (SQL Server CE) é uma versão especifica para a plataforma Windows CE-based, um banco de dados robusto, veloz e confiável para SmartDevices, ele é um subset do SQL Server 2000, algumas características não estão presentes na versão Server CE, para quem já usa o SQL Server 2000 o impacto será irrelevante. O .NET Framework fornece um Provider(Provedor) para acesso ao SQL Server CE através do namespace System.Data.SqlServerCe.

Você poderá usar todo o poder do DDL(Data Definition Language) para criar um Banco de Dados, alterar tabelas e fazer a definição de valores padrões, como mostra a Tabela 1, poderá usar a DML(Data Manipulation Language) para inserir(insert), deletar(delete) e atualizar(update) os dados, você terá todo o poder de um Banco de Dados Relacional, poderá usar criptografia de 128 Bits para senhas e arquivo. O SQL Server CE suporta Banco de Dados de até 2GB(GigaBytes) e Blobs de até 1GB(GigaByte).

Tipos de Dados

Descrição

bigint

Integer (conjunto de Inteiros) dados de -2^63 (- 9,223,372,036,854,775,808) por 2^63-1 (9,223,372,036,854,775,807). Tamanho do Armazenamento é de 8 bytes.

integer

Integer (Inteiros) dados de -2^31 (-2,147,483,648) por 2^31 - 1 (2,147,483,647).

smallint

Integer(Inteiros) dados de –32,768 to 32,767. Tamanho do Armazenamento é de 2 bytes.

tinyint

Integer(Inteiros) dados de 0 to 255. Tamanho do armazenamento é de 1 byte.

bit

Integer(Inteiro) armazena 0 ou 1.

numeric (p, s)

Precisão-Fixada e Escala-Numerica dados de -10^38 +1 por 10^38 –1. p especifica a precisão que pode ser entre de 1 e 38. s especifica a escala que pode ser entre 0 e p.

money

Valor Monetário dados de -2^63 (- 922,337,203,685,477.5808) por 2^63 - 1 (922,337,203,685,477.5807. Tamanho de armazenamento de 8 bytes.

float

Ponto Flutuante, dados de -1.79E + 308 por 1.79E + 308

Tamanho de armazenamento de 8 bytes.

real

Precisão Flutuante, dados de -3.40E + 38 por 3.40E + 38.

datetime

Data e Hora, contem tanto a Hora como a Data

national character(n)

Sinônimo:
nchar(n)

Tamanho-Fixo Unicode dados com tamanho máximo de 255 caracteres.
Tamanho Padrão = 1
Tamanho do Armazenamento, entre bytes, é duas vezes o tamanho dos caracteres armazenados.

national character varying(n)

Sinônimo:
nvarchar(n)

Tamanho-Váriavel Unicode dados com tamanho de 1 a 255 caracteres.
Tamanho Padrão = 1
Tamanho do Armazenamento, entre bytes, é duas vezes o tamanho dos caracteres armazenados.

ntext

Variable-length Unicode data with a maximum length of (2^30 - 2) / 2 (536,870,911) characters. Storage size, in bytes, is two times the number of characters entered.

binary(n)

Tamanho-Fixo binário dados com um tamanho máximo de 510 bytes. Tamanho Padrão = 1

varbinary(n)

Tamanho-Váriavel binário dados com um tamanho máximo de 510 bytes. Tamanho Padrão = 1

image

Variable-length binary data with a maximum length of 2^30 – 1 (1,073,741,823) bytes.

uniqueidentifier

Um Identificador Global Unico(GUID). Tamanho do armazenamento de 16 bytes.

IDENTITY [(s, i)]

Ela é uma propriedade da Coluna de Dados, não exatamente um tipo de dados.

Somente Colunas com tipo de dados inteiros(integer) podem usar a identidade(Identity). Uma tabela pode ter somente uma coluna de identidade. Pode ser identificado um valor inicia e um incrementador pode ser especificado e a coluna não poderá ser atualizada.

s (inicial) = Valor inicial

i (incrementador) = Valor incrementado a cada novo registro.

Tabela 1. Valores padrões

Iniciando o Desenvolvimento

Agora que conhecemos como funciona o SQL Server CE, quais são os tipos de dados, vamos criar e fazer acesso a um Banco de Dados SQL Server CE a partir do Visual Studio, criaremos tabelas, índices tudo baseado em SQL(Strutured Query Language), usarei nesse artigo a Linguagem VB.net, com alterações de sintaxe você poderá usar o C# sem mais complicações.

Acompanhe a Tabela 2 na qual contêm as definições das propriedades dos componentes buttons.

Name

Text

btnCriarBd

Criar Banco de Dados

btnConectarBd

Conectar BD

btnCriarTabelas

Criar Tabelas

btnInserirDados

Inserir Dados

btnSelecionarDados

Selecionar Dados

Tabela 2. Definições das Propriedades dos Componentes

É necessário referenciar o Namespace System.Data.SqlServerCe, com isso teremos o acesso total ao SQL Server CE, para referenciar é simples, no Solution Explorer clique com o botão direto do mouse encima do projeto do Pocket PC, clique no item “Add Reference...”, após isso abrirá uma janela para referenciar o namespace System.Data.SqlServerCe no Projeto.

Acessando SQL Server CE

Vamos ao código, faça os imports necessários e atribua o código da Listagem 1, aos eventos dos buttons.

'Importar os metódos da classe SQLServerCE
Imports System.Data.SqlServerCe
 
'Também é necessario fazer o Import das Funções de I/O
Imports System.IO
 
Public Class Form1
    Inherits System.Windows.Forms.Form
    Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu
 
#Region " Windows Form Designer generated code "
 
    Public Sub New()
        MyBase.New()
 
        'This call is required by the Windows Form Designer.
        InitializeComponent()
 
        'Add any initialization after the InitializeComponent() call
 
    End Sub
 
    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        MyBase.Dispose(disposing)
    End Sub
 
    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
    Friend WithEvents btnCriarBd As System.Windows.Forms.Button
    Friend WithEvents btnConectarBd As System.Windows.Forms.Button
    Friend WithEvents btnCriarTabelas As System.Windows.Forms.Button
    Friend WithEvents btnInserirDados As System.Windows.Forms.Button
    Friend WithEvents btnSelecionar As System.Windows.Forms.Button
    Private Sub InitializeComponent()
        Me.MainMenu1 = New System.Windows.Forms.MainMenu
        Me.btnCriarBd = New System.Windows.Forms.Button
        Me.btnConectarBd = New System.Windows.Forms.Button
        Me.btnCriarTabelas = New System.Windows.Forms.Button
        Me.btnInserirDados = New System.Windows.Forms.Button
        Me.btnSelecionar = New System.Windows.Forms.Button
        Me.DataGrid1 = New System.Windows.Forms.DataGrid
        '
        'btnCriarBd
        '
        Me.btnCriarBd.Location = New System.Drawing.Point(16, 16)
        Me.btnCriarBd.Size = New System.Drawing.Size(112, 20)
        Me.btnCriarBd.Text = "Criar Banco Dados"
        '
        'btnConectarBd
        '
        Me.btnConectarBd.Location = New System.Drawing.Point(136, 16)
        Me.btnConectarBd.Size = New System.Drawing.Size(96, 20)
        Me.btnConectarBd.Text = "Conectar BD"
        '
        'btnCriarTabelas
        '
        Me.btnCriarTabelas.Location = New System.Drawing.Point(16, 48)
        Me.btnCriarTabelas.Size = New System.Drawing.Size(112, 20)
        Me.btnCriarTabelas.Text = "Criar Tabelas"
        '
        'btnInserirDados
        '
        Me.btnInserirDados.Location = New System.Drawing.Point(136, 48)
        Me.btnInserirDados.Size = New System.Drawing.Size(96, 20)
        Me.btnInserirDados.Text = "Inserir Dados"
        '
        'btnSelecionar
        '
        Me.btnSelecionar.Location = New System.Drawing.Point(56, 80)
        Me.btnSelecionar.Size = New System.Drawing.Size(112, 20)
        Me.btnSelecionar.Text = "Selecionar Dados"
        '
        'DataGrid1
        '
        Me.DataGrid1.Location = New System.Drawing.Point(8, 112)
        Me.DataGrid1.Size = New System.Drawing.Size(224, 136)
        Me.DataGrid1.Text = "DataGrid1"
        '
        'Form1
        '
        Me.Controls.Add(Me.DataGrid1)
        Me.Controls.Add(Me.btnSelecionar)
        Me.Controls.Add(Me.btnInserirDados)
        Me.Controls.Add(Me.btnCriarTabelas)
        Me.Controls.Add(Me.btnConectarBd)
        Me.Controls.Add(Me.btnCriarBd)
        Me.Menu = Me.MainMenu1
        Me.Text = "SQL Server CE"
 
    End Sub
 
#End Region
    'Variável contem o path do nosso BD, aonde ele será criado e qual BD será usado
    Dim PathBD As String = "\Dados.sdf"
 
    'Variavél que instancia o objeto de conexão com o BD 
    Dim Conn As SqlCeConnection
 
    Private Sub MostraStatus(ByVal pMensagem As String)
        MessageBox.Show("Status Atual: " & pMensagem, "Status da Operação", 
        MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1)
    End Sub
    Private Sub btnCriarBd_Click(ByVal sender As System.Object, 
      ByVal e As System.EventArgs) 
      Handles btnCriarBd.Click
        Cursor.Current = Cursors.WaitCursor
        Try
            'Se o arquivo de Banco de Dados não exista, 
            'o mesmo é criado no caminho do PathBD
            If Not File.Exists(PathBD) Then
                Dim SQLEngine As New SqlCeEngine("Data Source=" & PathBD)
                SQLEngine.CreateDatabase()
                MostraStatus("Banco de Dados Criado com Sucesso!!!")
            Else
                MostraStatus("Banco de Dados já Existe!!!")
            End If
        Catch
            'Caso ocorra algum erro deve ser tratado aqui
            Throw
        End Try
        Cursor.Current = Cursors.Default
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) 
     Handles MyBase.Load
 
    End Sub
 
    Private Sub btnConectarBd_Click(ByVal sender As System.Object, 
      ByVal e As System.EventArgs) 
      Handles btnConectarBd.Click
        Cursor.Current = Cursors.WaitCursor
        Try
            'Inicia uma instancia da classe SQLCeconnection
            Conn = New SqlCeConnection("Data Source=" & PathBD)
 
            'Caso a conexão esteja fechada, será possível conectar com o BD 
            If Conn.State = ConnectionState.Closed Then
 
                'Abre a conexão 
                Conn.Open()
 
                MostraStatus("Conectado ao Banco de dados " & 
                  PathBD & " com sucesso !!!")
            End If
        Catch ex As Exception
            'Caso ocorra algum tipo de erro, deve ser tratado aqui
        End Try
        Cursor.Current = Cursors.Default
    End Sub
 
    Private Sub btnCriarTabelas_Click(ByVal sender As System.Object, 
      ByVal e As System.EventArgs) 
      Handles btnCriarTabelas.Click
        Cursor.Current = Cursors.WaitCursor
 
        Dim cmd As New SqlCeCommand( _
                "CREATE TABLE PRODUTOS(CODIGO INT IDENTITY PRIMARY KEY NOT NULL, 
                 NOME NVARCHAR(30), PRECO MONEY);", Conn)
        cmd.ExecuteNonQuery()
        cmd.Dispose()
 
        Cursor.Current = Cursors.Default
        MostraStatus("Tabela criada com Sucesso!!!")
 
    End Sub
 
    Private Sub btnInserirDados_Click(ByVal sender As System.Object, 
     ByVal e As System.EventArgs) 
     Handles btnInserirDados.Click
        Cursor.Current = Cursors.WaitCursor
 
        Dim cmd As New SqlCeCommand( _
        "INSERT INTO PRODUTOS(NOME, PRECO) VALUES('LEITE', 1.5);", Conn)
        cmd.ExecuteNonQuery()
 
        cmd.CommandText = "INSERT INTO PRODUTOS(NOME, PRECO) VALUES('ARROZ', 8.5);"
        cmd.ExecuteNonQuery()
 
        cmd.Dispose()
        Cursor.Current = Cursors.Default
 
        MostraStatus("Inserção concluida com Sucesso!!!")
    End Sub
 
    Private Sub btnSelecionar_Click(ByVal sender As System.Object, 
     ByVal e As System.EventArgs) 
     Handles btnSelecionar.Click
        Cursor.Current = Cursors.WaitCursor
 
        Dim Adp As New SqlCeDataAdapter("SELECT * FROM PRODUTOS", Conn)
        Dim ds As DataSet = New DataSet
        Adp.Fill(ds)
        DataGrid1.DataSource = ds.Tables(0).DefaultView
 
        Cursor.Current = Cursors.Default
 
        MostraStatus("Dados Selecionados com Sucesso!!!")
    End Sub
 End Class

Listagem 1. Código dos Eventos dos Buttons

Com isso, aprendemos um pouco das características do SQL Server CE, e como usar o SQL CE no Visual Studio com a Linguagem VB.net, espero ter ajudado.