如何在程序中获取本机(或局域网中)的SQL Server服务器名称呢? 因为要在程序中动态配置数据源,需要得到服务器名字,故有此一问,各位请帮帮忙! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SQL的服务器一般会开放1433端口,做个扫描就行了 用NetServerEnum函数,MSDN上该函数有一个列子。 代码如下:(对在线的局域网上的SQL服务器) char a[64],tempchar[64]; CString str; PSERVER_INFO_100 pBuf; PSERVER_INFO_100 pTmpBuf; DWORD dwLevel = 100; DWORD dwPrefMaxLen = -1; DWORD dwEntriesRead = 0; DWORD dwTotalEntries = 0; DWORD dwTotalCount = 0; DWORD dwServerType = SV_TYPE_SQLSERVER; DWORD dwResumeHandle = 0; NET_API_STATUS nStatus; LPTSTR pszServerName = NULL; DWORD i; nStatus = NetServerEnum(NULL, dwLevel, (LPBYTE *) &pBuf, dwPrefMaxLen, &dwEntriesRead, &dwTotalEntries, dwServerType, NULL, &dwResumeHandle); if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) { if ((pTmpBuf = pBuf) != NULL) { for (i = 0; i < dwEntriesRead; i++) { if (pTmpBuf == NULL) { fprintf(stderr, "An access violation has occurred\n"); break; } int leng = lstrlenW((unsigned short*)pTmpBuf->sv100_name)*2; if (leng>0) RtlMoveMemory(a,pTmpBuf->sv100_name,leng); memset(tempchar,0,64); WideCharToMultiByte( 0, 0, (unsigned short*)a, -1, tempchar, leng/2, NULL, NULL ); str+=tempchar; pTmpBuf++; dwTotalCount++; } if (nStatus == ERROR_MORE_DATA) { fprintf(stderr, "\nMore entries available!!!\n"); fprintf(stderr, "Total entries: %d", dwTotalEntries); } printf("\nEntries enumerated: %d\n", dwTotalCount); } } if (pBuf != NULL) NetApiBufferFree(pBuf); 需要头文件:#include <Lm.h>库:NETAPI32.LIB 在Berkeley_DB中如何实现一个关键字对应多个数据 求精确定位圆心的方法 请教 afxdb.inl出错! afxwin2.inl是什么文件? VC开发数据库系统,如何保护数据库不经第三方软件被查看或修改 使用Winsock怎样能够发送自定义IP报头的数据报? DLL与操作符重载 以CSOCKET * 作为线程参数,怎么CLOSE 请教高手一个DLL问题 问世间,谁能给我答案? socket传送数据加密的问题,谁有接触过DES加密,帮我看看 MFC里ID怎么设置?
char a[64],tempchar[64];
CString str;
PSERVER_INFO_100 pBuf;
PSERVER_INFO_100 pTmpBuf;
DWORD dwLevel = 100;
DWORD dwPrefMaxLen = -1;
DWORD dwEntriesRead = 0;
DWORD dwTotalEntries = 0;
DWORD dwTotalCount = 0;
DWORD dwServerType = SV_TYPE_SQLSERVER;
DWORD dwResumeHandle = 0;
NET_API_STATUS nStatus;
LPTSTR pszServerName = NULL;
DWORD i;
nStatus = NetServerEnum(NULL,
dwLevel,
(LPBYTE *) &pBuf,
dwPrefMaxLen,
&dwEntriesRead,
&dwTotalEntries,
dwServerType,
NULL,
&dwResumeHandle);
if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
{
if ((pTmpBuf = pBuf) != NULL)
{
for (i = 0; i < dwEntriesRead; i++)
{ if (pTmpBuf == NULL)
{
fprintf(stderr, "An access violation has occurred\n");
break;
}
int leng = lstrlenW((unsigned short*)pTmpBuf->sv100_name)*2;
if (leng>0)
RtlMoveMemory(a,pTmpBuf->sv100_name,leng);
memset(tempchar,0,64);
WideCharToMultiByte( 0, 0, (unsigned short*)a, -1, tempchar, leng/2, NULL, NULL );
str+=tempchar;
pTmpBuf++;
dwTotalCount++;
} if (nStatus == ERROR_MORE_DATA)
{
fprintf(stderr, "\nMore entries available!!!\n");
fprintf(stderr, "Total entries: %d", dwTotalEntries);
} printf("\nEntries enumerated: %d\n", dwTotalCount);
}
}
if (pBuf != NULL)
NetApiBufferFree(pBuf);
库:NETAPI32.LIB