I am trying to create a ESENT db and perform the basic crud operations.
This is how I create the DB -
Initialize(instanceName, databaseWorkingDirectory, fileName)
{
JET_ERR error;
error = JetCreateInstance(&m_jetInstance, instanceName);
// configure ESE DB system parameters
if (error == JET_errSuccess)
{
error = JetSetSystemParameter(&m_jetInstance, JET_sesidNil, JET_paramCircularLog, 1, NULL);
}
// the folder that will hold the transactions
if (error == JET_errSuccess)
{
error = JetSetSystemParameter(&m_jetInstance, JET_sesidNil, JET_paramSystemPath, 0, databaseWorkingDirectory);
}
if (error == JET_errSuccess)
{
error = JetSetSystemParameter(&m_jetInstance, JET_sesidNil, JET_paramTempPath, 0, databaseWorkingDirectory);
}
if (error == JET_errSuccess)
{
error = JetSetSystemParameter(&m_jetInstance, JET_sesidNil, JET_paramLogFilePath, 0, databaseWorkingDirectory);
}
if (error == JET_errSuccess)
{
error = JetSetSystemParameter(&m_jetInstance, JET_sesidNil, JET_paramCreatePathIfNotExist, 1, NULL);
}
// Init the instance
if (error == JET_errSuccess)
{
error = JetInit(&m_jetInstance);
}
// Begin Session
if (error == JET_errSuccess)
{
error = JetBeginSession(m_jetInstance, &m_jetSessionId, 0, 0);
}
CHAR databaseFilePath[MAX_PATH] = { 0 };
hr = StringCchPrintfA(databaseFilePath, ARRAYSIZE(databaseFilePath), "%s\\%s", databaseWorkingDirectory, fileName);
if (error == JET_errSuccess)
{
// check if the db is present by attaching
error = JetAttachDatabase(m_jetSessionId, databaseFilePath, 0);
if (error == JET_errObjectNotFound || error == JET_errFileNotFound)
{
hr = JetCreateDatabase(m_jetSessionId, databaseFilePath, NULL, &m_jetDataBaseId, 0); // create db
}
else
{
hr = JetOpenDatabase(m_jetSessionId, databaseFilePath, NULL, &m_jetDataBaseId, 0); // open db
}
}
JET_COLUMNCREATE_W table[NUMBER_OF_COLUMNS] = { 0 };
// Create Column
CreateJetColumns(table, NUMBER_OF_COLUMNS);
// Create Index
JET_INDEXCREATE_W index = { 0 };
index.cbStruct = sizeof(JET_INDEXCREATE_W);
index.szIndexName = PK_INDEX;
WCHAR indexString[] = L"+Key\0";
index.szKey = indexString;
index.cbKey = ARRAYSIZE(indexString) * sizeof(WCHAR);
index.grbit = JET_bitIndexPrimary;
// Prepare Table
JET_TABLECREATE_W tableStructure = { 0 };
tableStructure.cbStruct = sizeof(tableStructure);
tableStructure.szTableName = TABLE;
tableStructure.rgcolumncreate = table;
tableStructure.cColumns = NUMBER_OF_COLUMNS;
tableStructure.cIndexes = 1; // hard coded to 1 index for now.
tableStructure.rgindexcreate = &index;
// Open the table
error = JetOpenTableW(m_jetSessionId, m_jetDataBaseId, TABLE, NULL, 0, JET_bitTableUpdatable, &m_jetTableId);
// Table not present, so create the table
if (error == JET_errObjectNotFound)
{
error = JetCreateTableColumnIndexW(m_jetSessionId, m_jetDataBaseId, &tableStructure);
if (error == JET_errObjectNotFound)
{
error = JetOpenTableW(m_jetSessionId, m_jetDataBaseId, TABLE, NULL, 0, JET_bitTableUpdatable, &m_jetTableId);
}
}
}
Now, I am inserting data into the columns like this -
InsertData()
{
WCHAR *columnValue[NUMBER_OF_COLUMNS] = { key, title, shortDescription, longDescription, additionalHelpLink, defaultValue, lastUpdatedDate, lastAccessedDate, wcharOffline }; // input values
JET_SETCOLUMN setColumn[NUMBER_OF_COLUMNS] = { 0 };
JET_ERR error;
error = SetJetColumnValues(setColumn, NUMBER_OF_COLUMNS, columnValue);
if (SUCCEEDED(hr))
{
error = JetBeginTransaction(m_jetSessionId);
}
if (SUCCEEDED(hr))
{
error = JetPrepareUpdate(m_jetSessionId, m_jetTableId, updateFlag);
}
if (SUCCEEDED(hr))
{
error = JetSetColumns(m_jetSessionId, m_jetTableId, setColumn, NUMBER_OF_COLUMNS);
}
if (SUCCEEDED(hr))
{
error = JetUpdate(m_jetSessionId, m_jetTableId, nullptr, 0, nullptr);
}
if (SUCCEEDED(hr))
{
error = JetCommitTransaction(m_jetSessionId, 0);
}
}
When I am trying to see the first column value or seek to a particular value, it's not working for me. Can any of you let me know if I am doing something wrong here? When looking into the tempLog files that Jet creates I can see those records.