如何在程序中获取本机(或局域网中)的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 如何结束 system级 的进程 ? 高分求一道毕业设计的题目 要实现一个多任务的gui系统,对于多任务,需要涉及到哪些方面 用vc6.0 写stl 的应用程序,怎么错误这么多?是不是类库不兼容?请STL高手指点一下! 突然想到两个问题,来者有分。 鼠标响应程序,显示鼠标当前位置的程序问题 VC连接ODBC 如何通过程序模拟键盘控制某一软件的运行 对话框只刷新picture control,不刷新其他控件,怎么实现? VC++6.0 和 2008 等版本,是可以MFC的,那么最新版本,用的是什么 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