这是我的一个ISAPI程序保存图片文件的片断 用户通过IE浏览器向ISAPI 发送数据,ISAPI将图片数据保存到wwwpic.dbo.info_pic如果是C/S程序,更简单,原理是一样的 希望下面的代码对你有些帮助 mp3属于二进制文件,应该用img数据类型 //-------------------------------------- ///////////////////////////////////////////////// // pb: point to head+pic memory // dwPicLen: the length of pic plus length of html header /////////////////////////////////////////////////
怎样存到库里面去
先用一个Table中Query取得表。Edit;
TBlobField('音乐').LoadFromFile('音乐文件名');
Post;
用户通过IE浏览器向ISAPI 发送数据,ISAPI将图片数据保存到wwwpic.dbo.info_pic如果是C/S程序,更简单,原理是一样的
希望下面的代码对你有些帮助
mp3属于二进制文件,应该用img数据类型 //--------------------------------------
/////////////////////////////////////////////////
// pb: point to head+pic memory
// dwPicLen: the length of pic plus length of html header
/////////////////////////////////////////////////
SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc = SQL_NULL_HDBC;
SQLHSTMT hstmt = SQL_NULL_HSTMT;
RETCODE retcode;
PTR pParmID; if(SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv)!=SQL_SUCCESS)
{
*pCtxt<<_T(m_strPicHead);
*pCtxt<<_T("系统错误,数据库环句柄分配失败。");
*pCtxt<<_T(m_strPicEnd);
return;
}
if(SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER)!=SQL_SUCCESS)
{
*pCtxt<<_T(m_strPicHead);
*pCtxt<<_T("系统错误,数据库环句柄设定失败。");
*pCtxt<<_T(m_strPicEnd);
return;
}
if(SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc)!=SQL_SUCCESS)
{
*pCtxt<<_T(m_strPicHead);
*pCtxt<<_T("系统错误,数据库连接句柄分配失败。");
*pCtxt<<_T(m_strPicEnd);
return;
} char buf[1024];
char *pc,* pp;
memset(buf,'\0',1024);
pc=buf+256;
pp=buf+512;
strcpy(buf,g_strDataSource);
strcpy(pc,g_strSqlAccount);
strcpy(pp,g_strSqlPassWord); retcode = SQLConnect(hdbc, (unsigned char *)buf, SQL_NTS,
(unsigned char *)pc,SQL_NTS,
(unsigned char *)pp,SQL_NTS);
if(retcode==SQL_ERROR)
{
*pCtxt<<_T(m_strPicHead);
*pCtxt<<_T("系统错误,数据库连接失败。");
*pCtxt<<_T(m_strPicEnd);
return;
}
if(SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt)!=SQL_SUCCESS)
{
*pCtxt<<_T(m_strPicHead);
*pCtxt<<_T("系统错误,数据库语句句柄分配失败。");
*pCtxt<<_T(m_strPicEnd);
return;
} SDWORD cbImgSize =SQL_LEN_DATA_AT_EXEC(dwPicLen); retcode = SQLBindParameter(hstmt, // hstmt
1, // ipar
SQL_PARAM_INPUT, // fParamType
SQL_C_BINARY, // fCType
SQL_LONGVARBINARY, // FSqlType
dwPicLen, // cbColDef
0, // ibScale
(VOID *)1, // rgbValue
0, // cbValueMax
&cbImgSize); // pcbValue
if(retcode!=SQL_SUCCESS)
{
*pCtxt<<_T(m_strPicHead);
*pCtxt<<_T("系统错误,数据库参数绑定失败。");
*pCtxt<<_T(m_strPicEnd);
return;
}
///-----------------------------------------------------
CString strNcid,strDate,str;
strNcid.Format("T%s%d",pUser->m_strUserName.Left(2),clsRand.GetRand()); str.Format("%d",dwPicLen);
COleDateTime curTime;
curTime=COleDateTime::GetCurrentTime();
strDate=curTime.Format("%Y.%m.%d %H:%M:%S");
///////////////////////////////////////////////////////
memset(buf,'\0',1024);
strcpy(buf,"INSERT INTO wwwpic.dbo.info_pic(ncid,pddate,pilen,imgpic) VALUES('");
//strcpy(buf,"wwwpic.dbo.cp_info_pic_add '");
strcat(buf,strNcid);
strcat(buf,"','");
strcat(buf,strDate);
strcat(buf,"','");
strcat(buf,str);
strcat(buf,"',?)");
if(SQLExecDirect(hstmt,(unsigned char *)buf,SQL_NTS)!=SQL_NEED_DATA)
{
*pCtxt<<_T(m_strPicHead);
*pCtxt<<_T("系统错误,数据库数据交换失败。");
*pCtxt<<_T(m_strPicEnd);
return;
}
retcode = SQLParamData(hstmt, &pParmID);
if (retcode == SQL_NEED_DATA)
{
SQLPutData(hstmt,pb,dwPicLen);
}
// Make final SQLParamData call.
while(SQLParamData(hstmt, &pParmID)==SQL_STILL_EXECUTING) Sleep(100);
if(retcode==SQL_ERROR)
{
*pCtxt<<_T(m_strPicHead);
*pCtxt<<_T("系统错误,向数据库传送数据失败。");
*pCtxt<<_T(m_strPicEnd);
return;
}
//读:
CDatabase db;
db.Open("ODBC;DSN=dsnMPtest_mp3;UID=sa;PWD=123456",FALSE,FALSE);
CRS_MPtest rsMPtest(&db);
rsMPtest.Open();
rsMPtest.MoveFirst();
CFile outFile("OutPut\\Out1.Bmp",CFile::modeCreate|CFile::modeWrite);
LPSTR buffer = (LPSTR)GlobalLock(rsMPtest.m_postal_code.m_hData);
outFile.WriteHuge(buffer,rsMPtest.m_postal_code.m_dwDataLength);
GlobalUnlock(rsMPtest.m_postal_code.m_hData);
outFile.Close();
//写:
CDatabase db;
db.Open("ODBC;DSN=dsnMPtest_mp3;UID=sa;PWD=123456",FALSE,FALSE);
CRS_MPtest rsMPtest(&db);
rsMPtest.Open();
rsMPtest.AddNew();
CFile fileImage;
CFileStatus fileStatus;
fileImage.Open("SETUP16.BMP", CFile::modeRead);
fileImage.GetStatus(fileStatus);
rsMPtest.m_postal_code.m_dwDataLength = fileStatus.m_size; HGLOBAL hGlobal = GlobalAlloc(GPTR,fileStatus.m_size);
rsMPtest.m_postal_code.m_hData = GlobalLock(hGlobal); fileImage.ReadHuge(rsMPtest.m_postal_code.m_hData,fileStatus.m_size); rsMPtest.SetFieldDirty(&rsMPtest.m_postal_code);
rsMPtest.SetFieldNull(&rsMPtest.m_postal_code,FALSE);
rsMPtest.m_ID="1";
//rsMPtest.m_postal_code.m_hData;
rsMPtest.Update();