调试了半天,原来是忽略了字符编码的问题。
我的工程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&