Compartir a través de


Método CreateDatabase (SQL Server Compact)

El método CreateDatabase crea una nueva base de datos de MicrosoftSQL Server Compact 3.5.

Sintaxis

object.CreateDatabase(LocalConnection)

Parámetros

Parámetro

Descripción

LocalConnection

Valor de cadena que especifica la ruta de acceso y el nombre de archivo de la base de datos que se debe crear.

Prototipo

HRESULT CreateDatabase(BSTR LocalConnection);

Ejemplo

En el primer ejemplo se muestra cómo crear, cifrar, actualizar, compactar y reparar una base de datos de MicrosoftSQL Server Compact 3.5 sin distinción de mayúsculas y minúsculas. El segundo ejemplo demuestra cómo crear, compactar y reparar una base de datos de MicrosoftSQL Server Compact 3.5 con una intercalación con distinción de mayúsculas y minúsculas. Para obtener más información acerca de las bases de datos de SQL Server Compact con distinción de mayúsculas y minúsculas, vea Trabajar con intercalaciones (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;
}

En el ejemplo siguiente se muestra cómo crear una base de datos de MicrosoftSQL Server Compact 3.5 con distinción de mayúsculas y minúsculas, cómo utilizar Método CompactDatabase (SQL Server Compact) para cambiar el valor de distinción de mayúsculas y minúsculas de la base de datos y, cómo crear una base de datos reparada con una intercalación con distinción de mayúsculas y minúsculas. Para obtener más información acerca de las bases de datos de SQL Server Compact con distinción de mayúsculas y minúsculas, vea Trabajar con intercalaciones (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;
}

Notas

Importante

A partir de la versión SQL Server Compact 3.5 Service Pack 1 (SP1), se admiten las intercalaciones con distinción de mayúsculas y minúsculas. Para obtener más información, vea Trabajar con intercalaciones (SQL Server Compact).

En la tabla siguiente se enumeran las propiedades de conexión que se admiten en SQL Server Compact 3.5. 

Propiedad

Descripción

data source

Ruta de acceso y nombre de archivo de la base de datos de SQL Server Compact 3.5. Debe especificar la ruta de acceso absoluta del archivo de base de datos, en lugar de una ruta relativa.

Nota   Una aplicación que se ejecuta en un equipo de escritorio no puede abrir una conexión de base de datos a un archivo .sdf de un dispositivo. Del mismo modo, una aplicación que se ejecuta en un dispositivo no puede abrir una conexión de base de datos a un archivo .sdf de un equipo de escritorio.

ssce: case sensitive

Valor booleano que determina si la base de datos distingue mayúsculas de minúsculas. Debe establecerse en true para habilitar la distinción de mayúsculas y minúsculas, o en false para deshabilitarla. Si no se especifica, el valor predeterminado es false.

NotaNota
Esta propiedad se incluye a partir del lanzamiento de SQL Server Compact 3.5 Service Pack 1. Para obtener más información, vea Trabajar con intercalaciones (SQL Server Compact).

ssce: database password

Contraseña de la base de datos (puede tener hasta 40 caracteres). Si no se especifica, el valor predeterminado es sin contraseña. Esta propiedad debe especificarse si se habilita el cifrado en la base de datos. Si se especifica una contraseña, se habilita el cifrado en la base de datos.

ssce: encrypt database

Valor booleano que determina si la base de datos está cifrada. Debe establecerse en true para habilitar el cifrado o en false para deshabilitarlo. Si no se especifica, el valor predeterminado es false. Si se habilita el cifrado, también se deberá especificar una contraseña mediante la propiedad password. Si se especifica una contraseña, el cifrado se habilita independientemente del valor de esta propiedad.

NotaNota
La propiedad encrypt quedará obsoleta en una versión futura. La propiedad se conserva en SQL Server Compact 3.5 por razones de compatibilidad con las versiones anteriores.

ssce:encryption mode

o

encryption mode

Los valores para esta propiedad son

engine default

o

platform default

o

ppc2003 compatibility

El valor predeterminado es platform default.

ssce: max buffer size

Cantidad máxima de memoria (en KB) que puede usar SQL Server Compact 3.5 antes de empezar a vaciar los cambios en el disco. Si no se especifica ningún valor, se utiliza el valor predeterminado 640.

ssce: max database size

Tamaño máximo de la base de datos, en MB. Si no se especifica ningún valor, se utiliza el valor predeterminado 128.

ssce:mode

Modo que se usa al abrir el archivo de base de datos. En la tabla mostrada a continuación se indican los valores válidos. Si no se especifica ningún valor, se utiliza el valor predeterminado de lectura y escritura.

ssce: default lock timeout

El número de milisegundos predeterminado que una transacción esperará un bloqueo. Si no se especifica, el valor predeterminado es 5000 milisegundos para los equipos de escritorio y 2000 milisegundos para los dispositivos.

ssce: default lock escalation

Número de bloqueos que adquirirá una transacción antes de que se intente efectuar una extensión de fila a página o de página a tabla. Si no se especifica ningún valor, se utiliza el valor predeterminado 100.

ssce: flush interval

Especifica el intervalo de tiempo en segundos antes de que todas las transacciones confirmadas se vacíen en el disco. Si no se especifica ningún valor, se utiliza el valor predeterminado 10.

ssce: autoshrink threshold

Porcentaje de espacio disponible en el archivo de base de datos permitido antes del inicio de la reducción automática. Un valor de 100 deshabilita la reducción automática. Si no se especifica ningún valor, se utiliza el valor predeterminado 60.

ssce: temp file directory

Ubicación de la base de datos temporal. Si no se especifica, el valor predeterminado es utilizar como almacenamiento temporal la base de datos especificada en la propiedad de origen de datos.

ssce: temp file max size

Tamaño máximo del archivo de base de datos temporal, en megabytes. Si no se especifica ningún valor, se utiliza el valor predeterminado 128.

locale identifier

Id. de configuración regional (LCID) que se debe utilizar con la base de datos.

En la tabla siguiente se muestran los valores válidos de la propiedad de modo de la cadena de conexión.

Valor

Definición

Lectura y escritura

Permite que varios procesos abran y modifiquen la base de datos. Se trata del valor predeterminado si no se especifica la propiedad de modo.

De solo lectura

Permite abrir una copia de la base de datos en modo de solo lectura.

Exclusivo

No permite que otros procesos abran o modifiquen la base de datos.

Lectura compartida

Permite que otros procesos lean la base datos mientras está abierta, pero no permite que la modifiquen.

Las cadenas de conexión siguen estas reglas:

  1. Todos los caracteres de espacio en blanco, excepto los que se encuentran dentro de un valor o entre comillas, se omiten.

  2. Los pares de valores de palabras clave deben separarse mediante punto y coma (;). Si el punto y coma forma parte del valor, éste también debe estar delimitado por comillas.

  3. No se admiten secuencias de escape.

  4. El tipo de valor carece de importancia.

  5. En los nombres no se distinguen mayúsculas y minúsculas.

  6. Si un nombre de propiedad aparece más de una vez en una cadena de conexión, se utilizará el valor asociado con la última aparición.

  7. Los valores pueden delimitarse mediante comillas tipográficas sencillas o dobles; por ejemplo, nombre='valor' o nombre="valor". Se pueden utilizar tanto comillas tipográficas sencillas como dobles dentro de una cadena de conexión si se utiliza como delimitador la otra opción. Por ejemplo, los siguientes constituyen usos válidos de las comillas dentro de una cadena de conexión:

    "data source='MyDb.sdf'; ssce: mode=Exclusive;"
    'data source="MyDb.sdf"; ssce: mode=Exclusive;'
    
    • Por el contrario, estos ejemplos no son válidos:
    "data source="MyDb.sdf"; ssce: mode=Exclusive;"
    'data source='MyDb.sdf'; ssce: mode=Exclusive;'
    

Vea también

Otros recursos

Programación del objeto Engine (SQL Server Compact)