SQL连接?

时间:2014-04-19 10:08:20

标签: c++ sql-server sqlapi++

我使用SQLAPI ++将程序连接到数据库。

以下代码编译时没有错误。但是它没有连接到数据库。我收到一个错误说:

A network-related or instance-specific error occurred while establishing a connection
to
SQL Server.
The server was not found or was not accessible. 
Verify that the instance name is correct and that SQL Server is configured to allow 
remote connections. 
(provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
ExecuteNonQuery requires an open and available Connection. 
The connection's current state is closed.

我已经检查过我的服务器上启用了远程连接,并且启用了TCI / IP。我还尝试在防火墙上添加一个端口例外,但是我甚至试图关闭防火墙。 - 我的杀毒软件。

所以我相信这与我的代码有关。任何人都可以找到任何错误吗?

#include <iostream>
#include "SQLAPI\include\SQLAPI.h"
#include <string>
#include <Windows.h>


using namespace std;

int main(int argc, char* argv[])
{

SAConnection con; 

try
{ 
    con.Connect(

    "BLAKE\\SQLEXPRESS@ERP",     // db *& server?!*
        "sa",   // user
        "blake",   // password
    SA_SQLServer_Client);



}
catch (SAException &x)
{
    // SAConnection::Rollback()

    try
    {
        // on error rollback changes
        con.Rollback();
    }
    catch (SAException &)
    {
    }

    cerr << (const char*)(x.ErrText()) << endl;

}



return 0;
}

2 个答案:

答案 0 :(得分:2)

首先,您可能希望禁用命名管道作为协议,并仅强制通过TCP / IP连接。

之后,由于您指定了实例名称,因此您需要打开两个防火墙端口。一个用于SQL浏览器服务,它告诉SQL客户端正在运行SQL的哪些端口实例,以及一个用于SQL Server本身。名为instances的端口默认是随机的(因此需要监听固定端口的浏览器服务),但您可以将其更改为固定端口。

您还需要首先确保SQL浏览器服务正在运行。

您还可以将SQL正在侦听的端口粘贴到服务器规范的连接字符串中,例如:服务器\实例,港口。这意味着您需要直接连接到浏览器服务。

答案 1 :(得分:1)

当您的sqlServer服务停止或TCP端口发生更改时,会抛出此异常,因此请检查该端口。