ado.net连接不上sql2008:provider: 命名管道提供程序, error: 40 - 无法打开到SQL Server的连接

详细的错误信息:在 建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)。

环境:

数据库服务器:Windows Server 2008 + Sql Server 2008 R2;

应用服务器:Windows Server 2008  + IIS7 + ASP.NET 2.0(.NET Framework 3.5)

 

解决过程:

1、检查连接字符串,服务器IP,数据库名,用户名和密码均正确。把Data Source用机器名,而不是IP地址表示,未解决;

2、在Sql Server 2008中检查远程连接开关,一切正常:Sql Server Management Studio-右击服务器名-属性-连接,选中“允许远程连接到此服务器”。

3、在Sql Server 2008中检查是否允许Sql Server登录模式,一切正常:Sql Server Management Studio-右击服务器名-属性-安全性,选中“SQL Server和Windows身份验证模式”。

4、检查是否允许命名管道和TCP/IP连接,一切正常:“SQL Server 配置管理器”-依次检查几个网络配置的TCP/IP和命名管道是否打开。

5、检查应用服务器的防火墙,是否允许访问数据库服务器的1433端口。关闭了防火墙,未解决。

6、关闭数据库服务器防火墙,终于成功。

郁闷的地方在于:为什么安装SQL Server 2008的时候,系统不默认自动打开本机防火墙的1433端口?!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单的示例代码,演示如何使用C++封装ADO连接SQL Server进行增删查改操作: ```cpp #include <iostream> #include <windows.h> #include <comdef.h> #include <atlbase.h> #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") class CSQLServer { public: CSQLServer(); ~CSQLServer(); bool Connect(const std::string& strServer, const std::string& strDatabase, const std::string& strUser, const std::string& strPassword); void Disconnect(); bool ExecuteNonQuery(const std::string& strSQL); bool ExecuteScalar(const std::string& strSQL, _variant_t& vtResult); private: bool InitADO(); void UninitADO(); private: _ConnectionPtr m_pConnection; }; CSQLServer::CSQLServer() { InitADO(); } CSQLServer::~CSQLServer() { UninitADO(); } bool CSQLServer::Connect(const std::string& strServer, const std::string& strDatabase, const std::string& strUser, const std::string& strPassword) { try { std::string strConnString = "Provider=SQLOLEDB.1;"; strConnString += "Persist Security Info=False;"; strConnString += "Data Source=" + strServer + ";"; strConnString += "Initial Catalog=" + strDatabase + ";"; strConnString += "User ID=" + strUser + ";"; strConnString += "Password=" + strPassword + ";"; m_pConnection->Open(strConnString.c_str(), "", "", adConnectUnspecified); return true; } catch (_com_error& e) { std::cout << "Connect failed, error message: " << e.Description() << std::endl; return false; } } void CSQLServer::Disconnect() { m_pConnection->Close(); } bool CSQLServer::ExecuteNonQuery(const std::string& strSQL) { try { _RecordsetPtr pRecordset; pRecordset = m_pConnection->Execute(strSQL.c_str(), NULL, adCmdText); return true; } catch (_com_error& e) { std::cout << "ExecuteNonQuery failed, error message: " << e.Description() << std::endl; return false; } } bool CSQLServer::ExecuteScalar(const std::string& strSQL, _variant_t& vtResult) { try { _RecordsetPtr pRecordset; pRecordset = m_pConnection->Execute(strSQL.c_str(), NULL, adCmdText); if (pRecordset->adoEOF == true) { vtResult.Clear(); return false; } vtResult = pRecordset->Fields->GetItem((long)0)->Value; return true; } catch (_com_error& e) { std::cout << "ExecuteScalar failed, error message: " << e.Description() << std::endl; return false; } } bool CSQLServer::InitADO() { try { HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) { std::cout << "CoInitialize failed" << std::endl; return false; } hr = m_pConnection.CreateInstance(__uuidof(Connection)); if (FAILED(hr)) { std::cout << "CreateInstance failed" << std::endl; CoUninitialize(); return false; } return true; } catch (_com_error& e) { std::cout << "InitADO failed, error message: " << e.Description() << std::endl; return false; } } void CSQLServer::UninitADO() { m_pConnection.Release(); CoUninitialize(); } int main() { CSQLServer sqlServer; if (!sqlServer.Connect("localhost", "MyDatabase", "sa", "123456")) { return 0; } // 插入数据 std::string strSQL = "INSERT INTO MyTable (Name, Age) VALUES ('Tom', 20)"; sqlServer.ExecuteNonQuery(strSQL); // 修改数据 strSQL = "UPDATE MyTable SET Age = 21 WHERE Name = 'Tom'"; sqlServer.ExecuteNonQuery(strSQL); // 查询数据 strSQL = "SELECT Age FROM MyTable WHERE Name = 'Tom'"; _variant_t vtResult; if (sqlServer.ExecuteScalar(strSQL, vtResult)) { std::cout << "Tom's age is " << (int)vtResult.intVal << std::endl; } else { std::cout << "Tom not found!" << std::endl; } // 删除数据 strSQL = "DELETE FROM MyTable WHERE Name = 'Tom'"; sqlServer.ExecuteNonQuery(strSQL); sqlServer.Disconnect(); return 0; } ``` 上述代码使用`CSQLServer`类封装了ADO连接SQL Server的操作,并提供了插入、修改、查询、删除数据的方法。在使用时,只需要创建一个`CSQLServer`对象,调用`Connect`方法连接数据库,然后调用相应的方法执行SQL语句即可。 注意:上述代码使用了`#import`指令引入了`msado15.dll`库,需要确保该库已经安装在您的系统中。另外,需要链接`comsupp.lib`库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值