Partilhar via


Método CreateDatabase (SQL Server Compact)

O método CreateDatabase cria um novo banco de dados do MicrosoftSQL Server Compact 3.5.

Sintaxe

object.CreateDatabase(LocalConnection)

Parâmetros

Parâmetro

Descrição

LocalConnection

Um valor de cadeia de caracteres que especifica o caminho e o nome de arquivo do banco de dados a ser criado.

Protótipo

HRESULT CreateDatabase(BSTR LocalConnection);

Exemplo

O primeiro exemplo demonstra como criar, criptografar, atualizar, compactar e reparar um banco de dados do MicrosoftSQL Server Compact 3.5 sem diferenciação de maiúsculas e minúsculas. O segundo exemplo demonstra como criar, compactar e reparar um banco de dados do MicrosoftSQL Server Compact 3.5 com um agrupamento com diferenciação de maiúsculas e minúsculas. Para obter mais informações sobre bancos de dados do SQL Server Compact com diferenciação de maiúsculas e minúsculas, consulte Trabalhando com agrupamentos (SQL Server Compact).

// The first example:
// ClientAgent.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

// Include OS Header files
//

#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include<iostream>
// Include OS Header files
//
#include <sqlce_err.h>
#include <sqlce_oledb.h>
#include <sqlce_sync.h>

#define ExitOnFail(hr)              { if (FAILED(hr)) goto Exit; }
#define ExitOnNull(ptr)             { if (NULL == (ptr)) goto Exit; }
#define ExitOnFailOrNull(hr, ptr)   { ExitOnFail(hr); ExitOnNull(ptr); }
#define ExitOnAnyFailure(hr, pErr)  { ExitOnFail(hr); if (FAILED(pErr->GetMajor())) goto Exit; }
#define SAFERELEASE(ptr)            { if (NULL != ptr) ptr->Release(); ptr = NULL; }
#define DELNULL(ptr)                { if (NULL != ptr) delete ptr; ptr = NULL; }

#define WAIT_FOR_KEY_OUT(hr) {\
    printf("\n\nHRESULT = %lu (0x%08x)\n", hr, hr);\
    printf("Press ENTER to continue ...\n");\
    getchar();\
}

#define WAIT_FOR_KEY() {\
    printf("\nPress ENTER to continue ...\n");\
    getchar();\
}

//Files

BSTR connStrCreate = NULL;

BSTR connStrSrc = NULL;
BSTR connStrDst = NULL;

BSTR connStrCompactin = NULL;
BSTR connStrCompactout = NULL; 

BSTR connStrRepairedin = NULL;
BSTR connStrRepairedout = NULL;

HRESULT GetInterfacePointers(
    ISSCEEngine   **ppEngine, 
    ISSCEError    **ppErr = NULL
)
{
    HRESULT hr = NOERROR;

    if (NULL != ppEngine)
    {
        *ppEngine = (ISSCEEngine *) NULL; 

        hr = CoCreateInstance(CLSID_Engine, NULL, 
            CLSCTX_INPROC_SERVER, IID_ISSCEEngine, (LPVOID *) ppEngine);

        ExitOnFailOrNull(hr, *ppEngine);
    }

    if (NULL != ppErr)
    {
        *ppErr = (ISSCEError *) NULL;

        hr = CoCreateInstance(CLSID_SSCEError, NULL, 
            CLSCTX_INPROC_SERVER, IID_ISSCEError, (LPVOID *) ppErr);

        ExitOnFailOrNull(hr, *ppErr);
    }

Exit:
    return hr;
}


int _tmain(int argc, _TCHAR* argv[])
{
    ISSCEEngine  *pEngine = NULL;
    ISSCEError   *pError = NULL;

    HRESULT hr = NOERROR;
BSTR connStrCreate = SysAllocString((const OLECHAR*)L"Data Source=C:\\created35.sdf; SSCE:Database Password='123'; ");

BSTR connStrSrc = SysAllocString((const OLECHAR*)L"Data Source=C:\\encrypted31.sdf; SSCE:Database Password='123' ;");
BSTR connStrDst = SysAllocString((const OLECHAR*)L"Data Source=C:\\31upgradedto35.sdf; SSCE:Database Password='123' ; ssce:encrypt database='true';  SSCE:Database Password='123' ; ssce:encryption mode='ppc2003 compatibility';");

BSTR connStrCompactin = SysAllocString((const OLECHAR*)L"Data Source=C:\\encryptedC35.sdf; SSCE:Database Password='encrypt' ; ");
BSTR connStrCompactout = SysAllocString((const OLECHAR*)L"Data Source='C:\\35compacted.sdf'; SSCE:Database Password='123' ; ssce:encrypt database='true';  SSCE:Database Password='123' ; ssce:encryption mode='ppc2003 compatibility';"); 

BSTR connStrRepairedin = SysAllocString((const OLECHAR*)L"Data Source=C:\\encryptedR35.sdf; SSCE:Database Password='encrypt'");
BSTR connStrRepairedout = SysAllocString((const OLECHAR*)L"Data Source=C:\\35repaired.sdf;  SSCE:Database Password='123' ; ssce:encryption mode='ppc2003 compatibility'; ");

//DeleteFile(L"c:\\created35.sdf");
//DeleteFile(L"c:\\encrypted31.sdf");
//DeleteFile(L"c:\\31upgradedto35.sdf");
//DeleteFile(L"c:\\encryptedC35.sdf");
//DeleteFile(L"c:\\35compacted.sdf");
//DeleteFile(L"c:\\encryptedR35.sdf");
//DeleteFile(L"c:\\35repaired.sdf");

    CoInitialize(NULL);

    hr = GetInterfacePointers(&pEngine, &pError);
ExitOnFail(hr);

// test create
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrCreate);
printf("\n for create error=%lu",hr);

// test upgrade
// NOTE: you need a older ssce database for this - this wont work otherwise.
//
hr = NOERROR;
    hr = pEngine->UpgradeDatabase(connStrSrc, connStrDst);
printf("\n for upgrade error=%lu",hr);
    
// test compact
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrCompactin);
printf("\n for create error=%lu",hr);

hr = NOERROR;
hr=pEngine->CompactDatabase(connStrCompactin,connStrCompactout);
printf("\n for compact error=%lu",hr);

// test repair
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrRepairedin);
printf("\n for create error=%lu",hr);

hr = NOERROR;
hr=pEngine->Repair(connStrRepairedin,connStrRepairedout,RECOVERCORRUPTED);
printf("\n for repair error=%lu",hr);
    hr = NOERROR;

Exit:
    SysFreeString(connStrCreate);
    SysFreeString(connStrSrc);
    SysFreeString(connStrDst);
    SysFreeString(connStrCompactin);
    SysFreeString(connStrCompactout);
    SysFreeString(connStrRepairedin);
    SysFreeString(connStrRepairedout);
    CoUninitialize();
    WAIT_FOR_KEY_OUT(hr);
    return 0;
}

O exemplo a seguir demonstra como criar um banco de dados do MicrosoftSQL Server Compact 3.5, como usar o Método CompactDatabase (SQL Server Compact) para alterar a configuração de diferenciação de maiúsculas e minúsculas do banco de dados e como criar um banco de dados reparado com um agrupamento com diferenciação de maiúsculas e minúsculas. Para obter mais informações sobre bancos de dados do SQL Server Compact com diferenciação de maiúsculas e minúsculas, consulte Trabalhando com agrupamentos (SQL Server Compact).

// The second example:
// ClientAgent2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

// Include OS Header files
//

#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include<iostream>
// Include OS Header files
//
#include <sqlce_err.h>
#include <sqlce_oledb.h>
#include <sqlce_sync.h>

#define ExitOnFail(hr)              { if (FAILED(hr)) goto Exit; }
#define ExitOnNull(ptr)             { if (NULL == (ptr)) goto Exit; }
#define ExitOnFailOrNull(hr, ptr)   { ExitOnFail(hr); ExitOnNull(ptr); }
#define ExitOnAnyFailure(hr, pErr)  { ExitOnFail(hr); if (FAILED(pErr->GetMajor())) goto Exit; }
#define SAFERELEASE(ptr)            { if (NULL != ptr) ptr->Release(); ptr = NULL; }
#define DELNULL(ptr)                { if (NULL != ptr) delete ptr; ptr = NULL; }

#define WAIT_FOR_KEY_OUT(hr) {\
    printf("\n\nHRESULT = %lu (0x%08x)\n", hr, hr);\
    printf("Press ENTER to continue ...\n");\
    getchar();\
}

#define WAIT_FOR_KEY() {\
    printf("\nPress ENTER to continue ...\n");\
    getchar();\
}

//Files

BSTR connStrCreate = NULL;

BSTR connStrSrc = NULL;

BSTR connStrCompactin = NULL;
BSTR connStrCompactout = NULL; 

BSTR connStrRepairedin = NULL;
BSTR connStrRepairedout = NULL;

HRESULT GetInterfacePointers(
    ISSCEEngine   **ppEngine, 
    ISSCEError    **ppErr = NULL
)
{
    HRESULT hr = NOERROR;

    if (NULL != ppEngine)
    {
        *ppEngine = (ISSCEEngine *) NULL; 

        hr = CoCreateInstance(CLSID_Engine, NULL, 
            CLSCTX_INPROC_SERVER, IID_ISSCEEngine, (LPVOID *) ppEngine);

        ExitOnFailOrNull(hr, *ppEngine);
    }

    if (NULL != ppErr)
    {
        *ppErr = (ISSCEError *) NULL;

        hr = CoCreateInstance(CLSID_SSCEError, NULL, 
            CLSCTX_INPROC_SERVER, IID_ISSCEError, (LPVOID *) ppErr);

        ExitOnFailOrNull(hr, *ppErr);
    }

Exit:
    return hr;
}


int _tmain(int argc, _TCHAR* argv[])
{
    ISSCEEngine  *pEngine = NULL;
    ISSCEError   *pError = NULL;

    HRESULT hr = NOERROR;

BSTR connStrCreate = SysAllocString((const OLECHAR*)L"Data source=C:\\created35.sdf; SSCE:case sensitive=true; SSCE:Database Password='123'");

BSTR connStrCompactin = SysAllocString((const OLECHAR*)L"Data Source=C:\\compactIn35.sdf; SSCE:Database Password='123'");
BSTR connStrCompactout = SysAllocString((const OLECHAR*)L"Data Source='C:\\compactOut35.sdf'; SSCE:Database Password='123'; SSCE:case sensitive=true;"); 

BSTR connStrRepairedin = SysAllocString((const OLECHAR*)L"Data Source=C:\\repairIn35.sdf; SSCE:Database Password='123';");
BSTR connStrRepairedout = SysAllocString((const OLECHAR*)L"Data Source=C:\\repairOut35.sdf; SSCE:Database Password='123' ; SSCE:case sensitive=true;");

//DeleteFile(L"c:\\created35.sdf");
//DeleteFile(L"c:\\compactIn35.sdf");
//DeleteFile(L"c:\\compactOut35.sdf");
//DeleteFile(L"c:\\repairIn35.sdf");
//DeleteFile(L"c:\\repairOut35.sdf");

    CoInitialize(NULL);

    hr = GetInterfacePointers(&pEngine, &pError);
ExitOnFail(hr);

// test create
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrCreate);
printf("\n for create error=%lu",hr);

// test compact
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrCompactin);
printf("\n for create error=%lu",hr);

hr = NOERROR;
hr=pEngine->CompactDatabase(connStrCompactin,connStrCompactout);
printf("\n for compact error=%lu",hr);

// test repair
//
hr = NOERROR;
hr=pEngine->CreateDatabase(connStrRepairedin);
printf("\n for create error=%lu",hr);

hr = NOERROR;
hr=pEngine->Repair(connStrRepairedin,connStrRepairedout,RECOVERCORRUPTED);
printf("\n for repair error=%lu",hr);
    hr = NOERROR;

Exit:
    SysFreeString(connStrCreate);
    SysFreeString(connStrSrc);
    SysFreeString(connStrCompactin);
    SysFreeString(connStrCompactout);
    SysFreeString(connStrRepairedin);
    SysFreeString(connStrRepairedout);
    CoUninitialize();
    WAIT_FOR_KEY_OUT(hr);
    return 0;
}

Comentários

Importante

O suporte a agrupamentos com diferenciação de maiúsculas e minúsculas começa a ser apresentado na versão SQL Server Compact 3.5 Service Pack 1 (SP1). Para obter mais informações, consulte Trabalhando com agrupamentos (SQL Server Compact).

A tabela a seguir lista as propriedades de conexão suportadas no SQL Server Compact 3.5. 

Propriedade

Descrição

data source

O caminho e o nome do arquivo de banco de dados do SQL Server Compact 3.5. Especifique o caminho absoluto do arquivo de banco de dados, em vez de um caminho relativo.

Observação   Um aplicativo executado em um computador desktop não pode abrir uma conexão de banco de dados com um arquivo .sdf em um dispositivo. Da mesma maneira, um aplicativo executado em um dispositivo não pode abrir uma conexão de banco de dados a um arquivo .sdf em um computador desktop.

ssce: case sensitive

Um valor booleano que determina se o banco de dados diferencia maiúsculas de minúsculas. Deve ser definido como true para habilitar a diferenciação de maiúsculas e minúsculas ou false para desabilitá-la. Se não for especificado, o valor padrão será false.

ObservaçãoObservação
Esta propriedade é introduzida a partir do SQL Server Compact 3.5 versão SP1. Para obter mais informações, consulte Trabalhando com agrupamentos (SQL Server Compact).

ssce: database password

A senha do banco de dados, que pode ter até 40 caracteres de comprimento. Se não for especificada, o valor padrão será sem senha. Esta propriedade será necessária se você habilitar a criptografia no banco de dados. Se você especificar uma senha, a criptografia será habilitada no banco de dados.

ssce: encrypt database

Um valor booleano que determina se o banco de dados é criptografado. Deve ser definido como true para habilitar a criptografia ou false para desabilitá-la. Se não for especificado, o valor padrão será false. Se você habilitar a criptografia, especifique também uma senha com a propriedade password. Se você especificar uma senha, a criptografia será habilitada independentemente de como a propriedade for definida.

ObservaçãoObservação
A propriedade encrypt será preterida em uma versão futura. A propriedade é mantida no SQL Server Compact 3.5 para compatibilidade com versões anteriores.

ssce:encryption mode

ou

encryption mode

Os valores desta propriedade são

engine default

ou

platform default

ou

ppc2003 compatibility

O padrão é platform default.

ssce: max buffer size

A maior quantidade de memória, em KB, que o SQL Server Compact 3.5 pode usar antes de começar a liberar alterações para o disco. Se não for especificado, o valor padrão será 640.

ssce: max database size

O tamanho máximo do banco de dados, em MB. Se não for especificado, o valor padrão será 128.

ssce:mode

O modo a ser usado quando você abrir o arquivo de banco de dados. Para obter os valores válidos, consulte a tabela a seguir. Se não for especificado, o valor padrão será Read/Write.

ssce: default lock timeout

O número padrão de milissegundos que uma transação aguardará por um bloqueio. Se não for especificado, o valor padrão será de 5000 milissegundos para desktops e 2000 milissegundos para dispositivos.

ssce: default lock escalation

O número de bloqueios que uma transação adquirirá antes de você tentar o escalonamento de linha para página ou de página para tabela. Se não for especificado, o valor padrão será 100.

ssce: flush interval

Especifica o intervalo em segundos antes que todas as transações confirmadas sejam liberadas para o disco. Se não for especificado, o valor padrão será 10.

ssce: autoshrink threshold

A porcentagem de espaço livre permitido no arquivo de banco de dados antes de iniciar a redução automática. O valor 100 desabilita a redução automática. Se não for especificado, o valor padrão será 60.

ssce: temp file directory

O local do banco de dados temporário. Se não for especificado, o padrão será usar o banco de dados especificado na propriedade data source para o armazenamento temporário.

ssce: temp file max size

O tamanho máximo do arquivo de banco de dados temporário, em Megabytes. Se não for especificado, o valor padrão será 128.

locale identifier

A LCID (identificação de localidade) a ser usada com o banco de dados.

A tabela a seguir mostra os valores válidos da propriedade mode da cadeia de conexão.

Valor

Definição

Read Write

Permite que vários processos abram e modifiquem o banco de dados. Esta será a configuração padrão se a propriedade mode não for especificada.

Read Only

Permite abrir uma cópia somente leitura do banco de dados.

Exclusive

Não permite que outros processos abram ou modifiquem o banco de dados.

Shared Read

Permite que outros processos leiam, mas não modifiquem, o banco de dados enquanto ele está aberto.

As seguintes regras se aplicam às cadeias de conexão:

  1. Todos os caracteres em branco, exceto aqueles colocados em um valor ou entre aspas, são ignorados.

  2. Os pares de valores de palavras-chave devem ser separados por ponto-e-vírgula (;). Se um ponto-e-vírgula fizer parte de um valor, ele também deverá estar entre aspas.

  3. Não há suporte para seqüências de escape.

  4. O tipo de valor é irrelevante.

  5. Os nomes não diferenciam maiúsculas de minúsculas.

  6. Se o nome de uma propriedade ocorrer mais de uma vez na cadeia de conexão, será usado o valor associado à última ocorrência.

  7. Os valores podem ser delimitados por aspas simples ou duplas, por exemplo, name='valor' ou name="valor". Aspas simples ou duplas podem ser usadas em uma cadeia de conexão com outro delimitador. Exemplos de usos válidos das aspas em um cadeia de conexão:

    "data source='MyDb.sdf'; ssce: mode=Exclusive;"
    'data source="MyDb.sdf"; ssce: mode=Exclusive;'
    
    • Mas estes exemplos não são válidos:
    "data source="MyDb.sdf"; ssce: mode=Exclusive;"
    'data source='MyDb.sdf'; ssce: mode=Exclusive;'
    

Consulte também

Outros recursos

Programação do objeto Engine (SQL Server Compact)