如何从MFC以编程方式获取SQL Server名称 [英] How to get SQL Server Name Programmatically From MFC
本文介绍了如何从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屋!
查看全文