如何从MFC以编程方式获取SQL Server名称 [英] How to get SQL Server Name Programmatically From MFC

查看:107
本文介绍了如何从MFC以编程方式获取SQL Server名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何以编程方式从VC ++获取SQL服务器名称(非SQL实例名称),MFC

项目。请帮助

How to get SQL server Name (Not SQL Instance Name) Programmatically From VC++ ,MFC
Project. Please Help

推荐答案

我在Code Project上找到了Santosh Rao的文章,我在本地机器上找到了服务器。这是代码

I found Santosh Rao article on Code Project It self ,From That I was able to find servers on local machine.Here is Code
LPCTSTR pszInputParam = _T("Driver={SQL Server}");
	LPCTSTR pszLookUpKey = _T("SERVER:Server=");
	SQLHENV       hSQLEnv;
	SQLHDBC       hSQLHdbc;
	short		  sConnStrOut;
	BOOL		  bReturn = FALSE;
	//Allocate the environment handle
	SQLRETURN m_iRetcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hSQLEnv);
	if (m_iRetcode == SQL_SUCCESS || m_iRetcode == SQL_SUCCESS_WITH_INFO)
	{
		//Set the environment attribute to SQL_OV_ODBC3
		m_iRetcode = SQLSetEnvAttr(hSQLEnv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
		if (m_iRetcode == SQL_SUCCESS || m_iRetcode == SQL_SUCCESS_WITH_INFO) 
		{
		    //Allocate a connection handle
			m_iRetcode = SQLAllocHandle(SQL_HANDLE_DBC, hSQLEnv, &hSQLHdbc);
			if (m_iRetcode == SQL_SUCCESS || m_iRetcode == SQL_SUCCESS_WITH_INFO) 
			{
				CString szConnStrOut;
				//Call SQLBrowseConnect for additional information
				SQLSetConnectAttr(hSQLHdbc,SQL_COPT_SS_BROWSE_SERVER,_T("(local)"), SQL_NTS);
				m_iRetcode = SQLBrowseConnect(hSQLHdbc, (SQLWCHAR *)pszInputParam, SQL_NTS,
						 (SQLWCHAR *)(szConnStrOut.GetBuffer(MAX_RET_LENGTH)), MAX_RET_LENGTH, &sConnStrOut);
				szConnStrOut.ReleaseBuffer();
				//if the look up key is found
				//fill in the result set
				int iFind = szConnStrOut.Find(pszLookUpKey);
				if(iFind != -1)
				{
					CString szLookUpKey = pszLookUpKey;
					szConnStrOut = szConnStrOut.Mid(iFind+szLookUpKey.GetLength());
					iFind = szConnStrOut.Find('{');
					if(iFind != -1)
					{
						szConnStrOut = szConnStrOut.Mid(iFind+1);
						iFind = szConnStrOut.Find('}');
						if(iFind != -1)
						{
							szConnStrOut = szConnStrOut.Left(iFind);
							FillupStringArray(szConnStrOut,szArray);
							/*for(int i = 0;i< szArray.GetSize();i++)
							{
								ObjCommon.ShowMessage(szArray.GetAt(i));
							}*/
							bReturn = TRUE;
						}
					}
				}	

				SQLDisconnect(hSQLHdbc);
			}
			SQLFreeHandle(SQL_HANDLE_DBC, hSQLHdbc);
		}
		SQLFreeHandle(SQL_HANDLE_ENV, hSQLEnv);
	}
	CString serverName;
	if(szArray.GetSize() > 0)
	{
		serverName = szArray.GetAt(0);
		if(serverName.GetLength() < 2 && szArray.GetSize() > 1)
		{
			serverName = szArray.GetAt(1);
		}
		else
		{
			if(serverName.GetLength() < 2)
			{
				ObjCommon.ShowError(_T("SQL Server Not Installed"));
				return 0;
			}
		}
		if(serverName == _T("SQLEXPRESS"))
		{
			DWORD   dwComputerSize = MAX_COMPUTERNAME_LENGTH + 1;
			TCHAR   charComputer[MAX_COMPUTERNAME_LENGTH + 1];
			GetComputerName(charComputer, &dwComputerSize);
			CString csComputer(charComputer);
			serverName = csComputer + _T("\\\SQLEXPRESS");
		}
	}
	else
	{
		ObjCommon.ShowError(_T("SQL Server Not Installed"));
				return 0;
	}
	ObjCommon.ShowMessage(serverName + _T("  Final Server Name"));
	return serverName;


http://support.microsoft.com/kb/184608 [ ^ ]



http://dba.stackexchange.com/questions/16895/referencing-database-programmatically-via-t-sql [ ^ ]


这篇关于如何从MFC以编程方式获取SQL Server名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆