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, “Introduction to Computer Programming for Beginners“. 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 how you can efficiently work with SQL Server databases, via the Python Programming Language!

Enroll to our online course: Working with Python on Windows and SQL Server Databases.

This helps you learn how to access and work with SQL Server databases, directly from your Python programs, by teaching you how to perform all the major database development operations from within your Python code.

Working with Python on Windows and SQL Server Databases - Online Course
(Lifetime Access, Q&A, Certificate of Completion, downloadable resources and more!)

Learn More


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.

 

Watch the Video Lecture!

Enroll to the Online Course

 

 

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 Online Course!

Check our online course “Introduction to Computer Programming for Beginners”

Throughout the course, you will learn everything you need to get started with Computer Programming!

The Philosophy and Fundamentals of Computer Programming - Online Course
(Lifetime Access/ Live Demos / Downloadable Resources and more!)

The course is being constantly updated with new educational material.

 

Featured Online Courses:

 

Read Also:

 

Subscribe to our newsletter and stay up to date!

Subscribe to our YouTube channel (SQLNetHub TV)

Easily generate snippets with Snippets Generator!

Secure your databases using DBA Security Advisor!

Generate dynamic T-SQL scripts with Dynamic SQL Generator!

Check our latest software releases!

Check our eBooks!

 

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

Loading...

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

© SQLNetHub