应该怎样获取局域网内所有的SQL服务器名?谢谢! 应该怎样获取局域网内所有的SQL服务器名?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 亏了,只有20分bool CPageSrcData::GetSqlServers(CStringArray& aServerList){ aServerList.RemoveAll(); SQLHENV hSQLEnv; SQLHDBC hSQLHdbc; short sConnStrOut; int iRet=0; bool bSucceeded=false; //Allocate the environment handle iRet = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hSQLEnv); if (iRet == SQL_SUCCESS || iRet == SQL_SUCCESS_WITH_INFO) { //Set the environment attribute to SQL_OV_ODBC3 iRet = SQLSetEnvAttr(hSQLEnv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0); if (iRet == SQL_SUCCESS || iRet == SQL_SUCCESS_WITH_INFO) { //Allocate a connection handle iRet = SQLAllocHandle(SQL_HANDLE_DBC, hSQLEnv, &hSQLHdbc); if (iRet == SQL_SUCCESS || iRet == SQL_SUCCESS_WITH_INFO) { CString strConnStrOut; //Call SQLBrowseConnect for additional information iRet = SQLBrowseConnect(hSQLHdbc, (SQLCHAR *)_T("Driver={SQL Server}"), SQL_NTS, (SQLCHAR *)strConnStrOut.GetBuffer(4824), 4824, &sConnStrOut); //if the look up key is found //fill in the result set CString strSeps=_T("{}"),strServers,strServer,strToken; int iFind = strConnStrOut.Find(_T("SERVER:Server=")); if(iFind != -1) { strServers=strtok(CStrBuf(strConnStrOut),strSeps); strServers=strtok(NULL,strSeps); strSeps=_T(","); strServer=strtok(CStrBuf(strServers),strSeps); while(!strServer.IsEmpty()) { aServerList.Add(strServer); strServer=strtok(NULL,strSeps); } bSucceeded=true; } SQLDisconnect(hSQLHdbc); } SQLFreeHandle(SQL_HANDLE_DBC, hSQLHdbc); } SQLFreeHandle(SQL_HANDLE_ENV, hSQLEnv); } return bSucceeded;}用法void CPageSrcData::InitServerList(void){ CWaitCursor wait; CStringArray aSqlServerList; if(GetSqlServers(aSqlServerList)) { for(int i=0;i<aSqlServerList.GetCount();i++) m_cmbSQLServer.AddString(aSqlServerList.GetAt(i)); } m_cmbSQLServer.SetCurSel(0);}stdafx.h要加入#include <sql.h>#include <sqlext.h>#pragma comment(lib,"odbc32.lib")如果可以的话,呵呵,就不说了:) OK! This can work! Thanks 用mfc 开发activex控件的程序时,可不可以再包含别的控件? CMFCToolbarMenuButton问题 再不解决我就要翘了。。。 如何学习VC++ 急啊!串口对一组数据重复读取两次,请高手帮忙! 如何用ODBC操作进行将图像在MS SQL Server进行存储和提取! 网页实时播放录音 高分请教简单问题-CListCtrl 调试运行时,报出内存泄漏,如何释放内存?用free语句怎么不行? 怎么样象蚂蚁那样不用关闭就可以更换语言? 400元求解:困惑很久的一个问题 error LINK2001,不知怎么解决!郁闷~~~~~~~~~~
{
aServerList.RemoveAll(); SQLHENV hSQLEnv;
SQLHDBC hSQLHdbc;
short sConnStrOut;
int iRet=0;
bool bSucceeded=false; //Allocate the environment handle
iRet = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hSQLEnv);
if (iRet == SQL_SUCCESS || iRet == SQL_SUCCESS_WITH_INFO)
{
//Set the environment attribute to SQL_OV_ODBC3
iRet = SQLSetEnvAttr(hSQLEnv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
if (iRet == SQL_SUCCESS || iRet == SQL_SUCCESS_WITH_INFO)
{
//Allocate a connection handle
iRet = SQLAllocHandle(SQL_HANDLE_DBC, hSQLEnv, &hSQLHdbc);
if (iRet == SQL_SUCCESS || iRet == SQL_SUCCESS_WITH_INFO)
{
CString strConnStrOut;
//Call SQLBrowseConnect for additional information
iRet = SQLBrowseConnect(hSQLHdbc, (SQLCHAR *)_T("Driver={SQL Server}"), SQL_NTS,
(SQLCHAR *)strConnStrOut.GetBuffer(4824), 4824, &sConnStrOut);
//if the look up key is found
//fill in the result set
CString strSeps=_T("{}"),strServers,strServer,strToken;
int iFind = strConnStrOut.Find(_T("SERVER:Server="));
if(iFind != -1)
{
strServers=strtok(CStrBuf(strConnStrOut),strSeps);
strServers=strtok(NULL,strSeps);
strSeps=_T(",");
strServer=strtok(CStrBuf(strServers),strSeps);
while(!strServer.IsEmpty())
{
aServerList.Add(strServer);
strServer=strtok(NULL,strSeps);
}
bSucceeded=true;
} SQLDisconnect(hSQLHdbc);
}
SQLFreeHandle(SQL_HANDLE_DBC, hSQLHdbc);
}
SQLFreeHandle(SQL_HANDLE_ENV, hSQLEnv);
} return bSucceeded;
}
用法
void CPageSrcData::InitServerList(void)
{
CWaitCursor wait;
CStringArray aSqlServerList;
if(GetSqlServers(aSqlServerList))
{
for(int i=0;i<aSqlServerList.GetCount();i++)
m_cmbSQLServer.AddString(aSqlServerList.GetAt(i));
}
m_cmbSQLServer.SetCurSel(0);
}stdafx.h要加入
#include <sql.h>
#include <sqlext.h>
#pragma comment(lib,"odbc32.lib")如果可以的话,呵呵,就不说了:)