如何检查与SQL Server数据库的C ++代码连接?

时间:2014-02-17 14:37:13

标签: c++ sql sql-server winapi mfc

数据库:Microsoft SQL Server - 任何版本

最好是最简单的方法(不连接第三方库)。您只需要测试连接性

在任务中不能使用.Net Framework,不建议使用MFC

Visual Studio 2008 Professional中的项目

CDatabase * db = new CDatabase ();
if (!db->OpenEx (args [2], CDatabase::noOdbcDialog))
{
    printf ("Failed to connect to DB\n");
    ExitProcess (1);
}
db->Close();

MFC上的此代码不适用,因为它需要安装Redistributable。 最好使用WinAPI。

感谢您的关注。

UPD:

    SQLHANDLE hEnv, hDbc;

SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
SQLSetEnvAttr (hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, NULL);
SQLAllocHandle (SQL_HANDLE_DBC, hEnv, &hDbc);

LPSTR lpConnectionString = args [2];
LPSTR lpOutputString = new CHAR [256];
SQLSMALLINT sLength;
SQLRETURN sqlRet = SQLDriverConnect(hDbc, 0, (SQLCHAR*)lpConnectionString, strlen (lpConnectionString), (SQLCHAR*)lpOutputString, 255, &sLength, SQL_DRIVER_NOPROMPT);

args [2] =“DRIVER = {SQL Server}; SERVER = {VM7 \ SQLEXPRESS};数据库= {master}”;

VM7是我机器的名称

1 个答案:

答案 0 :(得分:0)

Windows附带的“原生”数据库只有2个。它们是ODBC和OLEDB。鉴于OLEDB是一个基于COM的接口,需要更多的知识,我只会在这里讨论ODBC解决方案。

下面的代码很简单,仅提供有关如何解决问题的提示。

#include <Windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>

#define MAX_STRING_LEN 255

int main()
{
    SQLHANDLE henv, hdbc;

    SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
    SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_ODBC_VER, SQL_IS_INTEGER);
    SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

    wchar_t* connection_string = L"Driver={SQL Server};Server=<address>;Database=<database name>;Uid=<username>;Pwd=<password>";
    wchar_t output_string[MAX_STRING_LEN + 1];
    SQLSMALLINT out_length;
    SQLDriverConnect(hdbc, 0, connection_string, lstrlen(connection_string), output_string, MAX_STRING_LEN, &out_length, SQL_DRIVER_NOPROMPT);

}