Minimal code to connect to MSSQL Server Express and extract some table data using Visual C++ Express

14,692

Solution 1

And here it is. Quite simple and easy once you know it...

SqlConnection^ myConnection = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=\"file.mdf\";Integrated Security=True;Connect Timeout=10;User Instance=True");
myConnection->Open();

SqlCommand^ scmd = gcnew SqlCommand("select ID from atable", myConnection);
SqlDataReader^ r = scmd->ExecuteReader();
while (r->Read())
    __int64 id = r->GetInt64(0);
r->Close();

Solution 2

This Worked for me

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>

using namespace std;

int main() {
    #define SQL_RESULT_LEN 240
    #define SQL_RETURN_CODE_LEN 1000
    //define handles and variables
    SQLHANDLE sqlConnHandle;
    SQLHANDLE sqlStmtHandle;
    SQLHANDLE sqlEnvHandle;
    SQLWCHAR retconstring[SQL_RETURN_CODE_LEN];
    //initializations
    sqlConnHandle = NULL;
    sqlStmtHandle = NULL;
    //allocations
    if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlEnvHandle))
        goto COMPLETED;
    if (SQL_SUCCESS != SQLSetEnvAttr(sqlEnvHandle, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0))
        goto COMPLETED;
    if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_DBC, sqlEnvHandle, &sqlConnHandle))
        goto COMPLETED;
    //output
    cout << "Attempting connection to SQL Server...";
    cout << "\n";
    //connect to SQL Server  
    //I am using a trusted connection and port 14808
    //it does not matter if you are using default or named instance
    //just make sure you define the server name and the port
    //You have the option to use a username/password instead of a trusted     connection
    //but is more secure to use a trusted connection
    switch (SQLDriverConnectW(sqlConnHandle,
        NULL,
        (SQLWCHAR*)L"DRIVER={SQL Server};SERVER=ServerAddress,     1433;DATABASE=DataBaseName;UID=DataBaseUserName;PWD=PassWord;",
        //(SQLWCHAR*)L"DRIVER={SQL Server};SERVER=localhost, 1433;DATABASE=master;Trusted=true;",
        SQL_NTS,
        retconstring,
        1024,
        NULL,
        SQL_DRIVER_NOPROMPT)) {
    case SQL_SUCCESS:
        cout << "Successfully connected to SQL Server";
        cout << "\n";
        break;
    case SQL_SUCCESS_WITH_INFO:
        cout << "Successfully connected to SQL Server";
        cout << "\n";
        break;
    case SQL_INVALID_HANDLE:
        cout << "Could not connect to SQL Server";
        cout << "\n";
        goto COMPLETED;
    case SQL_ERROR:
        cout << "Could not connect to SQL Server";
        cout << "\n";
        goto COMPLETED;
    default:
        break;
    }
    //if there is a problem connecting then exit application
    if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_STMT, sqlConnHandle,     &sqlStmtHandle))
        goto COMPLETED;
    //output
    cout << "\n";
    cout << "Executing T-SQL query...";
    cout << "\n";
    //if there is a problem executing the query then exit application
    //else display query result
    if (SQL_SUCCESS != SQLExecDirectW(sqlStmtHandle, (SQLWCHAR*)L"SELECT @@VERSION", SQL_NTS)) {
        cout << "Error querying SQL Server";
        cout << "\n";
        goto COMPLETED;
    }
    else {
        //declare output variable and pointer
        SQLCHAR sqlVersion[SQL_RESULT_LEN];
        SQLINTEGER ptrSqlVersion;
        while (SQLFetch(sqlStmtHandle) == SQL_SUCCESS) {
            SQLGetData(sqlStmtHandle, 1, SQL_CHAR, sqlVersion,     SQL_RESULT_LEN, &ptrSqlVersion);
            //display query result
            cout << "\nQuery Result:\n\n";
            cout << sqlVersion << endl;
        }
    }
    //close connection and free resources
COMPLETED:
    SQLFreeHandle(SQL_HANDLE_STMT, sqlStmtHandle);
    SQLDisconnect(sqlConnHandle);
    SQLFreeHandle(SQL_HANDLE_DBC, sqlConnHandle);
    SQLFreeHandle(SQL_HANDLE_ENV, sqlEnvHandle);
    //pause the console window - exit when key is pressed
    cout << "\nPress any key to exit...";
    getchar();
}
Share:
14,692
Milan Babuškov
Author by

Milan Babuškov

Software developer, owner of a small ISV company, project manager of the open source FlameRobin project. Specialized in Linux, C++, PHP and Relational databases. You can read my software related blog at http://www.BackwardCompatible.net You can also buy my shareware software at http://www.GuacoSoft.com

Updated on June 04, 2022

Comments

  • Milan Babuškov
    Milan Babuškov almost 2 years

    I have the following software installed on the machine:

    • Microsoft SQL Server Express 2005
    • Microsoft Visual C++ Express 2008

    I have a .mdf file from which I need to read some data and dump to a text file. I can browse the database file using the Database Explorer in Visual Studio without any problem, but I'm having trouble connecting from the application.

    I googled far and wide, almost all "solutions" say that I should start a new project and select the "SQL server application template", which I don't have amongst templates. Other tutorials I found say I should use "Data Source Configuration Wizard", however I cannot find such wizard in any of the menus.

    I don't mind clicking although I would prefer if all this was doable in plain C++ code. Something like:

    DbConnection *d = new MSSQLConnection("local", "c:\path\to\file.mdf");
    DbQuery *q = new DbQuery(d, "select * from mytable");
    ...dump the data and go home
    

    Thanks.

    Alternatively, if someone can tell me how to do this in C++:

    http://sharpertutorials.com/connecting-to-a-sql-server-database/

  • Nadaraj
    Nadaraj over 9 years
    To do so, which header files/references I need to include?
  • Motomotes
    Motomotes over 7 years
    This is C++\CLI or special MS.NET C++.
  • Charles Lohr
    Charles Lohr over 2 years
    YOU SIR ARE AMAZING. This worked for me! The only thing I struggled with was the unicode, but switching everything to multi-byte, it worked perfectly.