vs2012连接sql2012,SQLDriverConnect问题
调试了半天,原来是忽略了字符编码的问题。
我的工程UNiCODE编码,但是我在传参数的时候传的const char*,我一直以为是我装sql2012的问题,折腾了半天的数据库,把该开的服务都开了,还是连接不上。
快绝望的时候,看自己的连接字符串:
m_retCode = ::SQLDriverConnect(m_hdbc, NULL, (SQLWCHAR*)pszDSN, SQL_NTS, szOutConn, SQL_MAX_CONN_COUNT, &sOutConn, SQL_DRIVER_COMPLETE);感觉有点不靠谱。
所以写了个转换字符串的函数:
SQLWCHAR* CDBSqlServer::CharToWchar(const char* c)
{SQLWCHAR *m_wchar;int len = MultiByteToWideChar(CP_ACP, 0, c, strlen(c), NULL, 0);m_wchar = new SQLWCHAR[len + 1];MultiByteToWideChar(CP_ACP, 0, c, strlen(c), m_wchar, len);m_wchar[len] = '\0';return m_wchar;
}
再调试下,果然连接上了。o(╯□╰)o。。。说明我的代码习惯的确不好。。。要自己反省哇。。。。。
完整函数如下:
LPSTR pDSN = "DRIVER={SQL Server};SERVER=SH-LIUGAO;DATABASE=uu278;UID=lg2;PWD=lg456&&;";
bool CDBSqlServer::DriverConnectSqlServer(LPSTR pszDSN)
{SQLTCHAR szOutConn[SQL_MAX_CONN_COUNT] = { 0 };short sOutConn = 0;SQLWCHAR* pszWDSN = CharToWchar(pszDSN);if (!pszWDSN){return false;}m_retCode = ::SQLDriverConnect(m_hdbc, NULL, pszWDSN, SQL_NTS, szOutConn, SQL_MAX_CONN_COUNT, &sOutConn, SQL_DRIVER_COMPLETE);if (!ODBC_SUCCEED(m_retCode)){GetError();return false;}m_retCode = ::SQLAllocHandle(SQL_HANDLE_STMT, m_hdbc, &m_hstmt);if (!ODBC_SUCCEED(m_retCode)){GetError();return false;}//释放前面创建的字符串if (pszWDSN){delete[] pszWDSN;pszWDSN = NULL;}m_bConnected = true;return true;}
更多推荐
vs2012连接sql2012,SQLDriverConnect问题
发布评论