我想要将一个BYTE类型的数组放进sql server
但是VC默认的数据库录入方法是:比如
_variant_t Holder, strQuery;
strQuery = "INSERT INTO buf(buf, length) VALUES('"+ temp +"', '"+ int2str(sizeof/(TypeMember)) +"')";
theApp.ADOExecute(theApp.m_pADOSet, strQuery);也就是说'"+ +"'里面的东西,VC只接受CString格式!我如果把BYTE格式的东西放进'"+ 变量 +"'去,编译器就会报错!!!
求教该怎样把BYTE数组放进去啊!!!!
但是VC默认的数据库录入方法是:比如
_variant_t Holder, strQuery;
strQuery = "INSERT INTO buf(buf, length) VALUES('"+ temp +"', '"+ int2str(sizeof/(TypeMember)) +"')";
theApp.ADOExecute(theApp.m_pADOSet, strQuery);也就是说'"+ +"'里面的东西,VC只接受CString格式!我如果把BYTE格式的东西放进'"+ 变量 +"'去,编译器就会报错!!!
求教该怎样把BYTE数组放进去啊!!!!
解决方案 »
- 一个bmp格式的图像文件怎么一分为二,成为两个bmp格式的文件?
- 关于对话框的画图
- 不用mfc实现非阻塞socket编程
- 为何透明显示的BMP文件时,在桌面16位时颜色下正常透明,32位下不正常?
- 我的vc还是我有问题?
- 怎样从一个进程中(或另一个包中)动态加载这个类?获得这个类的属性和方法?
- 请教一个关于API拦截的问题
- 计算项目的成本都包括什么呢?
- 谁能对::QueryPerformanceCounter((LARGE_INTEGER*)&Counter)和::QueryPerformanceFrequency((LARGE_INTEGER*)&Counter)做一个详细地解释
- why the are so many defunct process!
- 如何获得弹出窗口默认输入焦点的子控件的窗口HANDLE?
- 怎样获取版本号?
VALUES( 0x??????00 )
如果BYTE数组里面存在0的话,转换成字符串后就自动截止了
所以不能走转字符串的路
莫非你的BYTE 转字符串是以string类型作参数的?
里面有int,float,char。cstring等好多数据类型
然后用memcpy复制到BYTE数组里面
{
...
//{{AFX_FIELD(CImageRecord, CRecordset)
CLongBinary m_image;
//}}AFX_FIELD
...
};BYTE src[LEN];
CMyRecord rsImg;rsImg.AddNew();
rsImg.m_image.m_dwDataLength = LEN;HGLOBAL hGlobal = GlobalAlloc(GPTR, LEN);
rsImg.m_image.m_hData = GlobalLock(hGlobal);memcpy(rsImg.m_image.m_hData, src, LEN);rsImg.SetFieldDirty(&rsImg.m_image);
rsImg.SetFieldNull(&rsImg.m_image, FALSE);
rsImg.Update();可以在网上找找ado的,操作更方便一些
BOOL PutCollect(LPCTSTR strFieldName, PBYTE pBuff, DWORD dwSize )
{
ASSERT(m_pRecordset != NULL );
#ifdef _DEBUG
if( GetFieldType(strFieldName) != adVarBinary )
{
m_strLastError.Format(_T(" 你要存贮的字段与变量的数据类型不符. "));
TRACE(_T("Warning: 你要存贮的字段与变量的数据类型不符; 文件: %s; 行: %d\n"), __FILE__, __LINE__);
}
#endif SAFEARRAY FAR* psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = dwSize;
// create a single dimensional byte array
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
// set the data of the array with data in the edit box
void *pByte;
if(SafeArrayAccessData(psa,(void **)&pByte) == NOERROR)
memcpy(pByte, pBuff, dwSize);
SafeArrayUnaccessData(psa);
_variant_t vt;
vt.vt = VT_ARRAY | VT_UI1;
vt.parray = psa;
BOOL bSucc = PutCollect(strFieldName, vt);// LocalFree( (HLOCAL)pByte );
// SafeArrayDestroy( psa );
//delete []pByte; return bSucc;
}
我以前是用SQL 语句进行添加修改删除的
现在我的程序中用sql语句+ADOSet->Open的方式对数据库进行操作一点问题都没有
但是一用ADOSet->Addnew() 或者 ADOSet->MoveFirst()等语句,编译时没有问题
但是运行时报错!!!!只有ADOSet->GetCollect(,)可以正常工作!!!
是不是sql server 有什么设置啊????
请问我为什么一用PutCollect系统就报错啊!!!
我以前是用SQL 语句进行添加修改删除的
现在我的程序中用sql语句+ADOSet->Open的方式对数据库进行操作一点问题都没有
但是一用ADOSet->Addnew() 或者 ADOSet->MoveFirst()等语句,编译时没有问题
但是运行时报错!!!!只有ADOSet->GetCollect(,)可以正常工作!!!
是不是sql server 有什么设置啊????