向数据库表中添加二进制流的有关问题
向数据库表中添加二进制流的问题
毕业设计做一个网络协议分析软件,但把winpcap抓的数据包存到数据库(ACCESS)里时就出错了,请高手指点!部分代码如下:
DWORD WINAPI CaptureThread(LPVOID pParam)
//UINT CMy1234Dlg::CaptureThread(LPVOID pParam)
{
pcap_if_t* alldevs;
pcap_if_t* d;
char errbuf[PCAP_ERRBUF_SIZE];
pcap_findalldevs(&alldevs,errbuf); // 获得网络设备指针
d=alldevs;
const char* pCardName=(char*)pParam; // 转换参数,获得网卡名字
adhandle = pcap_open_live(d-> name,65535,1,1000,errbuf);
struct pcap_pkthdr *header;
const u_char *pkt_data; //指向常量的指针数据包内容指针
_ConnectionPtr m_pConnection;
AfxOleInit();//实现初始化COM和结束时关闭COM的操作
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
// 打开本地Access库db1.mdb
m_pConnection-> Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb ", " ", " ",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox( "数据库连接失败,确认数据库db1.mdb是否在当前路径下! ");
return FALSE;
}
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
//创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
try
{
m_pRecordset-> Open( "SELECT * FROM data ", m_pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic, adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e-> ErrorMessage());
}
int re;
while((re=pcap_next_ex(adhandle,&header,&pkt_data))> =0)
{
m_pRecordset-> AddNew();
char *pBuf = (char *)pkt_data ;
int m_nFileLen= strlen((char*)pkt_data);
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
///添加新记录
if(pBuf)
{
rgsabound[0].lLbound=0;
rgsabound[0].cElements=m_nFileLen;
psa=SafeArrayCreate(VT_UI1,1,rgsabound); ///创建SAFEARRAY对象
for(long i=0;i <(long)m_nFileLen;i++)
毕业设计做一个网络协议分析软件,但把winpcap抓的数据包存到数据库(ACCESS)里时就出错了,请高手指点!部分代码如下:
DWORD WINAPI CaptureThread(LPVOID pParam)
//UINT CMy1234Dlg::CaptureThread(LPVOID pParam)
{
pcap_if_t* alldevs;
pcap_if_t* d;
char errbuf[PCAP_ERRBUF_SIZE];
pcap_findalldevs(&alldevs,errbuf); // 获得网络设备指针
d=alldevs;
const char* pCardName=(char*)pParam; // 转换参数,获得网卡名字
adhandle = pcap_open_live(d-> name,65535,1,1000,errbuf);
struct pcap_pkthdr *header;
const u_char *pkt_data; //指向常量的指针数据包内容指针
_ConnectionPtr m_pConnection;
AfxOleInit();//实现初始化COM和结束时关闭COM的操作
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
// 打开本地Access库db1.mdb
m_pConnection-> Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb ", " ", " ",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox( "数据库连接失败,确认数据库db1.mdb是否在当前路径下! ");
return FALSE;
}
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
//创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
try
{
m_pRecordset-> Open( "SELECT * FROM data ", m_pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic, adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e-> ErrorMessage());
}
int re;
while((re=pcap_next_ex(adhandle,&header,&pkt_data))> =0)
{
m_pRecordset-> AddNew();
char *pBuf = (char *)pkt_data ;
int m_nFileLen= strlen((char*)pkt_data);
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
///添加新记录
if(pBuf)
{
rgsabound[0].lLbound=0;
rgsabound[0].cElements=m_nFileLen;
psa=SafeArrayCreate(VT_UI1,1,rgsabound); ///创建SAFEARRAY对象
for(long i=0;i <(long)m_nFileLen;i++)