Как я могу создать локальную базу данных в проекте Microsoft Visual C ++ 2010 Express? - PullRequest
7 голосов
/ 23 сентября 2011

Как создать локальную базу данных в проекте Microsoft Visual C ++ 2010 Express?

Извините, но я не могу найти этот простой ответ в Интернете. Единственный ответ, который я нашел, для Visual Studio: используя проект> добавить новый элемент> локальную базу данных. Но эта опция недоступна в Visual C ++ 2010 Express Edition.

Я попытался установить «Microsoft SQL Server Compact 4» и «Microsoft SQL Server Denali» и обновить «Microsoft Visual C ++ 2010 Express» из «Центра обновления Windows».

1 Ответ

7 голосов
/ 06 октября 2011

Хорошо, я наконец-то получил решение. К сожалению, я должен ответить на свой вопрос ...

Я использовал библиотеку SQLite (http://www.sqlite.org/). Это было немного сложно, потому что документация sqlite немного расплывчата, но я сделал следующее:

  • Скачать sqlitedll * .zip - извлечь файлы .def и .dll куда-нибудь.
  • Создайте файл lib с помощью команды типа "c: \ program" files \ micros ~ 1 \ vc98 \ bin \ lib "/def:sqlite3.def". Сделай это из команды подскажите, в каталоге с файлом .def, с соответствующим путь к вашему lib.exe. Вам может понадобиться сначала запустить vcvars32.bat, который также в каталоге bin. Скопируйте полученный .lib в соответствующий поместите, и установите это как каталог библиотеки в VC ++. (Или сделай это на на основе проекта.)
  • Загрузите файл sqlite-source * .zip и извлеките файл sqlite3.h изнутри в подходящий каталог. Установите это как каталог включения в вк ++. (Опять же, вы можете сделать это на основе проекта.)
  • В вашем проекте, #include при необходимости, добавьте sqlite3.lib в свой проект, скопируйте sqlite3.dll в каталог вашего исполняемого файла или рабочий каталог, и вы должны быть готовы к работе.

Тогда легко использовать запросы без вывода сообщений, но если вы хотите использовать, например, SQL «SELECT», вы можете использовать этот код:

std::string queries;
// A prepered statement for fetching tables
sqlite3_stmt *stmt;
// Create a handle for database connection, create a pointer to sqlite3
sqlite3 *handle;
// try to create the database. If it doesnt exist, it would be created
// pass a pointer to the pointer to sqlite3, in short sqlite3**
int retval = sqlite3_open("local.db",&handle);
// If connection failed, handle returns NULL
if(retval){
    System::Windows::Forms::MessageBox::Show("Database connection failed");
    return;
}       
// Create the SQL query for creating a table
char create_table[100] = "CREATE TABLE IF NOT EXISTS users (uname TEXT PRIMARY KEY,pass TEXT NOT NULL,activated INTEGER)";
// Execute the query for creating the table
retval = sqlite3_exec(handle,create_table,0,0,0);
// Insert first row and second row
queries = "INSERT INTO users VALUES('manish','manish',1)";
retval = sqlite3_exec(handle,queries.c_str(),0,0,0);
queries = "INSERT INTO users VALUES('mehul','pulsar',0)";
retval = sqlite3_exec(handle,queries.c_str(),0,0,0);
// select those rows from the table
queries = "SELECT * from users";
retval = sqlite3_prepare_v2(handle,queries.c_str(),-1,&stmt,0);
if(retval){
    System::Windows::Forms::MessageBox::Show("Selecting data from DB Failed");
    return ;
}
// Read the number of rows fetched
int cols = sqlite3_column_count(stmt);
while(1){
    // fetch a row’s status
    retval = sqlite3_step(stmt);
    if(retval == SQLITE_ROW){
    // SQLITE_ROW means fetched a row
    // sqlite3_column_text returns a const void* , typecast it to const char*
        for(int col=0 ; col<cols;col++){
            const char *val = (const char*)sqlite3_column_text(stmt,col);
            System::Windows::Forms::MessageBox::Show(stdstr2systemstr(sqlite3_column_name(stmt,col))+" = "+stdstr2systemstr(val));
        }
    }
    else
    if(retval == SQLITE_DONE){
            // All rows finished
            System::Windows::Forms::MessageBox::Show("All rows fetched");
            break;
        }
        else{
            // Some error encountered
            System::Windows::Forms::MessageBox::Show("Some error encountered");
            return ;
        }
    }
    // Close the handle to free memory
    sqlite3_close(handle);

Я ожидаю, что эта информация будет полезна!

Источники:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...