vs2012连接sql2012,SQLDriverConnect问题
16lz
2021-01-22
调试了半天,原来是忽略了字符编码的问题。
我的工程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; }
更多相关文章
- 使用带有派生列的SQL排名函数
- 如何通过使用where子句与字符串格式(varchar(103),...,10)将103格式化
- 数据库截取字符串SUBSTR函数的使用
- SQL Server CLR函数类型不匹配。
- MySQL中的字符串模式匹配
- 从SQL字符串分割多桩分隔符
- mysql中MAX()函数MIN()函数
- ORACLE-SQL:定义并使用多字符串变量
- MySQL 中的函数(一:数学函数)