Hi all
i want to use c++ to insert binary data in to mssql actually i am reading file in to char buffer & then i want to insert this file into table
the table have two fields
name as varchar(50)
data as varbinary(MAX)
can some one provide me any link for doing this , i tried google but i got c# code rather than c++
thanks in advance
[EDIT]
well i do not want C# i am trying c++
i try SQLPutData for inserting data but not working
#include <iostream>
#include <windows.h>
#include <tchar.h>
#include <string>
#include <sqlext.h>
#include <string.h>
#include <fstream>
using namespace std;
void geterror(SQLHSTMT hstmt)
{
SQLSMALLINT HandleType;
SQLHANDLE Handle;
SQLSMALLINT RecNumber;
SQLCHAR SQLState[500]="INSERT INTO files VALUES('Paul Borm', ?)";
SQLINTEGER NativeErrorPtr;
SQLCHAR MessageText[SQL_MAX_MESSAGE_LENGTH] = "";
SQLSMALLINT BufferLength=0;
SQLSMALLINT TextLengthPtr;
SQLSTATE state;
SQLRETURN retcode;
int i = 1;
while (( retcode = SQLGetDiagRecA(SQL_HANDLE_STMT, hstmt, i, SQLState, &NativeErrorPtr,MessageText, sizeof(MessageText), &TextLengthPtr)) != SQL_NO_DATA)
{
cout<<SQLState<<endl;
i++;
}
}
#define TEXTSIZE 12000
#define MAXBUFLEN 256
SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;
void Cleanup()
{
if (hstmt1 != SQL_NULL_HSTMT)
SQLFreeHandle(SQL_HANDLE_STMT, hstmt1);
if (hdbc1 != SQL_NULL_HDBC) {
SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
}
if (henv != SQL_NULL_HENV)
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
int main()
{
RETCODE retcode;
SQLLEN cbTextSize, lbytes;
PTR pParmID;
string s = "C:\\z\\Worker_at_carbon_black_plant2.jpg";
ifstream fin;
fin.open(s.c_str(),ios::binary|ios::ate);
size_t sz = fin.tellg();
fin.seekg(0,ios::beg);
char *ptr = new char[sz];
fin.read(ptr,sz);
fin.close();
SDWORD cbBatch = sz - 1;
retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);
if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS))
{
printf("SQLAllocHandle(Env) Failed\n\n");
Cleanup();
return(9);
}
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);
if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS))
{
printf("SQLSetEnvAttr(ODBC version) Failed\n\n");
Cleanup();
return(9);
}
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS))
{
printf("SQLAllocHandle(hdbc1) Failed\n\n");
Cleanup();
return(9);
}
SQLCHAR OutConnStr[255];
SQLSMALLINT OutConnStrLen;
retcode = SQLDriverConnectA( hdbc1,
NULL,
(SQLCHAR*)"DRIVER=SQL Server;SERVER=WW2001453\\SQLEXPRESS;DATABASE=vivdb;Trusted_Connection=Yes;",
_countof("DRIVER=SQL Server;SERVER=WW2001453\\SQLEXPRESS;DATABASE=vivdb;Trusted_Connection=Yes;"),
OutConnStr,
255,
&OutConnStrLen,
SQL_DRIVER_NOPROMPT );
if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) )
{
printf("SQLConnect() Failed\n\n");
Cleanup();
return(9);
}
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) )
{
printf("SQLAllocHandle(hstmt1) Failed\n\n");
Cleanup();
return(9);
}
lbytes = sz;
retcode = SQLBindParameter (hstmt1, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_VARBINARY, 0 , 0, (VOID *)1, 0, &cbTextSize);
geterror(hstmt1);
if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLBindParameter Failed\n\n");
Cleanup();
return(9);
}
retcode = SQLExecDirectA(hstmt1, (UCHAR*)"INSERT INTO files VALUES('Paul Borm', ?)", SQL_NTS);
if ( (retcode != SQL_SUCCESS) && (retcode != SQL_NEED_DATA) && (retcode != SQL_SUCCESS_WITH_INFO) )
{
printf("SQLExecDirect Failed\n\n");
Cleanup();
return(9);
}
retcode = SQLParamData(hstmt1, &pParmID);
if (retcode == SQL_NEED_DATA)
{
while (lbytes > 5000)
{
retcode = SQLPutData(hstmt1, ptr, 5000);
geterror(hstmt1);
lbytes -= 5000;
ptr += 5000;
}
retcode = SQLPutData(hstmt1, ptr, lbytes);
}
geterror(hstmt1);
if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) )
{
printf("SQLParamData Failed\n\n");
Cleanup();
return(9);
}
retcode = SQLParamData(hstmt1, &pParmID);
if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) )
{
printf("Final SQLParamData Failed\n\n");
Cleanup();
return(9);
}
SQLFreeHandle(SQL_HANDLE_STMT, hstmt1);
SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
<pre>
[/EDIT]