|
AskSQLTeam
Ask SQLTeam Question
0 Posts |
Posted - 2003-01-06 : 10:07:04
|
Carl Dan writes "When I used BCP to BULK INSERT data into SQL Server table from program varibles,I found memory leak with SQL Server service(Sqlservr.exe).How can I tackle the problem?Here is BULK INSERT Thread(10 seconds scan):...SQLHENV henv = SQL_NULL_HDBC;SQLHDBC hdbc = SQL_NULL_HDBC;int nRowsProcessed = 0 ; // row processedchar szDataSource[MAXNAME]; // maxname =129;char szUser[MAXNAME];char szPassWord[MAXNAME];char szTableName[MAXNAME]; // find table name, it no, create it;CString sTempName;sTempName = g_arrBufState[nBufIndex].sTableName; // Get table Name Get_Char(g_tIniFile.sDataSource, szDataSource); Get_Char(g_tIniFile.sDbUser,szUser); Get_Char(g_tIniFile.sDbPsw, szPassWord); Get_Char(sTempName, szTableName); bool bHasODBCError = false;bool bHasOtherError = false; CString sErrorStr = _T("Eorror1£¬ File£º[") + g_arrBufState[nBufIndex].sFileName + _T("]£¬Cause£º\n"); while (true) // Main Loop{ if (SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv) == SQL_ERROR){ bHasODBCError = true; break;}// Notify ODBC that this is an ODBC 3.0 application.if (SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER) == SQL_ERROR){ bHasODBCError = true; break;}// Allocate an ODBC connection handle and connect.if (SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc) == SQL_ERROR){ bHasODBCError = true; break;}// Enable bulk copy prior to connecting on allocated hdbc.if (SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON, SQL_IS_INTEGER) == SQL_ERROR){ bHasODBCError = true; break;}//Use ODBC connectionif (SQLConnect(hdbc, (LPCBYTE)szDataSource, (SWORD)strlen(szDataSource), (LPCBYTE)szUser, (SWORD)strlen(szUser), (LPCBYTE)szPassWord, (SWORD)strlen(szPassWord)) == SQL_ERROR){ bHasODBCError = true; break;} //////////////////////////////////////////////////////////// var of col name char szType[2];char szPhoneNumber[16];char szCalledNumber[21];char szCallDate[9];char szCallTime[7];char szCallDuration ;char szCallFee[14];char szCallType[2];char szCityCode[3];char * terminator = "\0"; // Initialize bcp. if (bcp_init(hdbc, szTableName, NULL, NULL, DB_IN) == SQL_ERROR){ bHasODBCError = true; break;}// Set the count of rows per batch. /*if (bcp_control(hdbc, BCPBATCH, (void*)g_tIniFile.nBufSize) == SQL_ERROR){ bHasODBCError = true; break;}*//////////////////////////////////////////////////////// Bind program variables to table columns. /////////if (bcp_bind(hdbc, (LPCBYTE)szType, 0, SQL_VARLEN_DATA, (LPCBYTE)terminator, 1, SQLCHARACTER, 1) == SQL_ERROR){ bHasODBCError = true; break;}if (bcp_bind(hdbc, (LPCBYTE)szPhoneNumber, 0, SQL_VARLEN_DATA, (LPCBYTE)terminator, 1, SQLCHARACTER, 2) == SQL_ERROR){ bHasODBCError = true; break;}if (bcp_bind(hdbc, (LPCBYTE)szCalledNumber, 0, SQL_VARLEN_DATA, (LPCBYTE)terminator, 1, SQLCHARACTER, 3) == SQL_ERROR){ bHasODBCError = true; break;}if (bcp_bind(hdbc, (LPCBYTE)szCallDate, 0, SQL_VARLEN_DATA, (LPCBYTE)terminator, 1, SQLCHARACTER, 4) == SQL_ERROR){ bHasODBCError = true; break;}if (bcp_bind(hdbc, (LPCBYTE)szCallTime, 0, SQL_VARLEN_DATA, (LPCBYTE)terminator, 1, SQLCHARACTER, 5) == SQL_ERROR){ bHasODBCError = true; break;}if (bcp_bind(hdbc, (LPCBYTE)szCallDuration, 0, SQL_VARLEN_DATA, (LPCBYTE)terminator, 1, SQLCHARACTER, 6) == SQL_ERROR){ bHasODBCError = true; break;}if (bcp_bind(hdbc, (LPCBYTE)szCallFee, 0, S |
|