Sql connection?

Sql connection?

本文关键字:connection Sql      更新时间:2023-10-16

Im使用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 "SQLAPIincludeSQLAPI.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;
}

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

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

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

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

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