如何在Microsoft Visual C++ 2010 Express项目中创建本地数据库?

Leo*_*zyk 7 c++ database sqlite visual-c++

如何在Microsoft Visual C++ 2010 Express项目中创建本地数据库?

对不起,我在网上找不到这个简单的答案.我找到的唯一答案是Visual Studio:使用项目>添加新项>本地数据库.但是此选项在Visual c + + + 2010 Express Edition中不可用.

我尝试安装"Microsoft SQL Server Compact 4"和"Microsoft SQL Server Denali",并从"Windows Update"更新"Microsoft Visual C++ 2010 Express".

Leo*_*zyk 7

好的,我终于得到了解决方案.遗憾的是,我必须回答我自己的问题......

我使用了SQLite库(http://www.sqlite.org/).这有点复杂,因为sqlite文档有点模糊,但我做了如下:

  • 下载sqlitedll*.zip - 在某处提取.def和.dll文件.
  • 使用"c:\ program files\micros~1\vc98\bin\lib"/def:sqlite3.def"等命令生成lib文件.从命令提示符处,在.def文件所在的目录中执行此操作,使用lib.exe的相应路径.您可能需要首先运行vcvars32.bat,它也位于bin目录中.将生成的.lib复制到适当的位置,并将其设置为VC++中的库目录.(或者按项目进行.)
  • 下载sqlite-source*.zip文件,并从内部将sqlite3.h文件解压缩到合适的目录.将其设置为VC++中的include目录.(同样,你可以在每个项目的基础上做到这一点.)
  • 在你的项目中,根据需要#include,将sqlite3.lib添加到你的项目中,将sqlite3.dll复制到你的可执行文件目录或工作目录中,你应该准备好了.

然后,很容易使用no-out查询,但是如果你想使用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);
Run Code Online (Sandbox Code Playgroud)

我希望这些信息有用!

资料来源: