How to Connect to SQL Server from Visual C++

In this article, we are going to see, step by step, how we can connect to SQL Server from a Visual C++ program using an ODBC connection.

Prior to start reading, if you are really interested in learning Programming, then you should definitely check my 6-hour online course, “The Philosophy and Fundamentals of Computer Programming“. My course can help to easily get started with the basics of Programming, as well as with the following 6 interesting Programming/Scripting Languages: C, C++, C#, Java, Python and SQL.

Great! Let’s begin this interesting tutorial!

 

Creating an Empty Visual C++ Win32 Console Application

We start this journey, by first creating an empty Visual C++ Win32 Console Application in Visual Studio, by following the below steps:

Step 1: Let’s start a new project in Visual Studio:

How to Connect to SQL Server from Visual C++ , Article on SQLNetHub
Launching a new project in Visual Studio.

 

Step 2: Create a new Visual C++ – Win32 Console Application.

How to Connect to SQL Server from Visual C++, Article on SQLNetHub
Creating a Win32 Console Application in Visual Studio.

 

Step 3: Click on the “Finish” button to start the project.

How to Connect to SQL Server from Visual C++, Article on SQLNetHub
Completing the empty project creation in Visual Studio.

 

Including the Proper Libraries in your Visual C++ Project

Now it’s the time to include the proper libraries to your new C++ project in visual studio. Here’s how:

Step 4: Add the following code before the int main() function:

#include "stdafx.h"

//include the below additional libraries
#include <iostream>
#include <windows.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <sql.h>

//use the std namespace
using namespace std;

Note that  #include “stdafx.h” is automatically added by the project wizard.


Learn Programming from scratch and get started fast, with 6 Programming Languages: C, C++, C#, Python, Java and SQL!

Check our online course: The Philosophy and Fundamentals of Computer Programming.

This course, will help you get started with C++, C, Python, SQL, Java, C# and learn more about Programming and the Programmer’s Mindset. Moreover, it will help you learn more about the main phases of the Software Development Lifecycle.

The Philosophy and Fundamentals of Computer Programming - Online Course
Lifetime Access, Downloadable Resources, Live Demos, and more.

This course, is definitely a must for beginners that are just starting out with computer Programming, but it is also useful for any technical level, since besides the main principles of programming, it also talks about the Programmer’s Mindset, that is the required skill set every great Programmer must have.

Enroll Now with Discount!


Writing the Main Logic of your Visual C++ Program

Now, let’s implement the proper logic, by including the below code in the “main” function:

Step 5: Replace your int main() function with the below code, modify the connection string, T-SQL query, variables, etc. accordingly and then  build the solution (press F6 or click on Build–Build solution).

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 (SQLDriverConnect(sqlConnHandle,
    NULL,
    //(SQLWCHAR*)L"DRIVER={SQL Server};SERVER=localhost, 1433;DATABASE=master;UID=username;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 != SQLExecDirect(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();
}

 

About the Connection Strings

As you can see, in the above code, I have specified the connection string as below:

(SQLWCHAR*)L"DRIVER={SQL Server};SERVER=localhost, 1433;DATABASE=master;Trusted=true;",

With the above connection string, I’m attempting a trusted connection to SQL Server on localhost, port 1433. Also, note that by the time I am using SQLWCHAR I need to insert an L prior to the connection string value.

Furthermore, note that it doesn’t matter if you are trying to connect to a default or named instance of SQL Server. Just make sure you define the server name and the port number.

Also, if you want to connect to SQL Server using a username/password instead of a trusted connection, you can use a connection string like the below:

(SQLWCHAR*)L"DRIVER={SQL Server};SERVER=localhost, 1433;DATABASE=master;UID=username;PWD=password;",

*Note: It is recommended to prefer trusted connections to SQL Server for better security.

 

Program Output – Successful Connection to SQL Server

The last screenshot illustrates the output when running the application. As you can see in the code, I’m executing the query:

SELECT @@VERSION

 

Here’s the output:

How to Connect to SQL Server from Visual C++, Article on SQLNetHub
Successful connection to SQL Server from a C++ program.

 

Concluding Remarks

This was a simple example on how you can connect to SQL Server from Visual C++ and run a simple query.

You can easily modify this code in order to suit your needs.

If you want to see an example of retrieving more than one column using queries against SQL Server, you can find more information in this MS Docs article.

 

Learn Programming From Scratch – Enroll to our Course!

Check our online course “The Philosophy and Fundamentals of Computer Programming”.

Via a 6-hour journey, you will learn everything you need to get started with Computer Programming!

The course is being constantly updated with new educational material.

 

Featured Online Courses:

 

Read Also:

 

Subscribe to our Newsletter!

 

Rate this article: 1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5.00 out of 5)

Loading...

Reference: SQLNetHub.com (https://www.sqlnethub.com)

© SQLNetHub