}
//实例化命令集指针对象
hRes = m_pCommandmsg.CreateInstance(__uuidof(Command));
if (!SUCCEEDED(hRes))
{
m_strErrorMsg = _T("实例化命令集指针对象失败");
return FALSE;
}
}catch(_com_error *e)
{
AfxMessageBox(e->Description());
m_strErrorMsg.Format(_T("%s"),e->Description());
return FALSE;
}
return TRUE;
}
BOOL CDao::GetData(CString strSql,CString *strQueryCloum,int nCloumNum,CStringArray& strDataValue)
{
HRESULT het;
//_bstr_t 字符串 _variant_t 多种数据类型集合 vt类型 ..value值 //com
_bstr_t bstrSql = strSql; //执行sql
_bstr_t bstrConnect = m_strConnect; //连库串
_bstr_t bstrQueryCloum; //列名
Fields *fields;
FieldPtr fieldPtr;
CString strValue;
_variant_t varBLOB;
try
{
//1.打开表
/*m_pRecordset->Open(查询SQL语句,连接串,打开方式,数据源更新时如何锁定结果集,以什么形式传入)
打开方式:
adOpenUnspecified = -1, 默认的方式打开
adOpenForwardOnly = 0, 向前移动的游标打开
adOpenKeyset = 1, 以键值打开
adOpenDynamic = 2, 当你添加数据时别人也有可能往这个表添加数据,谁在前谁添加到前面(多人用数据库时)
adOpenStatic = 3 别人也想往里面添加数据一直停留在打开时候
锁定结果集方式:
adLockReadOnly = 1, 只读的不能改变数据
adLockPessimistic = 2, (保守式锁定)逐个 编辑时立即锁定数据源的纪录
adLockOptimistic = 3, (开放式锁定)逐个 只在调用update方法时才锁定纪录
adLockBatchOptimistic = 4 开方式 可以更新一批数据更新模式
+ bstrConnect {"Driver={SQL Native Client};Server=192.168.1.92,2433;Uid=sa;Pwd=sa;Database=colin0716" (1)} _bstr_t
+ bstrSql {"select * from student" (1)} _bstr_t
*/
het = m_pRecordset->Open(bstrSql,bstrConnect,adOpenDynamic,adLockOptimistic,adCmdText);
if (!SUCCEEDED(het))
{
AfxMessageBox(_T("打开表失败"));
m_strErrorMsg = _T("查询表失败");
return FALSE;
}
//循环结果
while(!m_pRecordset->ADOEOF)
{
for(int i=0;i
bstrQueryCloum = strQueryCloum[i];
fields = m_pRecordset->GetFields();
fieldPtr = fields->GetItem(bstrQueryCloum);
varBLOB = fieldPtr->GetValue();
//long nSize =fieldPtr->ActualSize;
//注意图片名称必须为图片流的前一个字段
//strValue = DataToCStringType(varBLOB,nSize,strValue);
strValue = DataToCStringType(varBLOB);
strDataValue.Add(strValue);
//varBLOB.Detach();
}
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
}
catch(_com_error *e)
{
m_strErrorMsg = e->ErrorMessage();
AfxMessageBox(e->ErrorMessage());
}
return TRUE;
}
CString CDao::DataToCStringType(VARIANT Var)
{
CString strValue;
switch(Var.vt)
{
case VT_BOOL:
strValue.Format(_T("%d"), Var.boolVal);
break;
case VT_I4:
strValue.Format(_T("%d"), Var.intVal);
break;
case VT_R8:
case VT_DECIMAL:
strValue.Format(_T("%0.2f"), Var.dblVal);
break;
case VT_BSTR:
strValue= Var.bstrVal;
break;
default:
strValue = _T("");
break;
}
return strValue;
}
BOOL CDao::AddData(CString strTableName,CStringArray& strCloumValue,int nCloumNum)
{
//校验
if (strTableName.IsEmpty() || strCloumValue.GetCount() == 0 || nCloumNum == 0)
{
m_strErrorMsg = _T("参数错误");
AfxMessageBox(_T("输入参数错误,请重新输入"));
return FALSE;
}
CString strQuery;
strQuery.Format(_T("select * from [%s]"),strTableName);
//自带的字符串类型
_bstr_t bstrQuery(strQuery);
_bstr_t bstrCource(m_strConnect);
HRESULT hres;
Fields *pFiles = NULL;
//ado把所有的数据类型都写在VARIANT这里面
VARIANT varIndex;
varIndex.vt = VT_I4; //R代表float CY==钱数 VT_代表的都是comADO代表的数据类型
Field *pFile = NULL;
DataTypeEnum dataType;
VARIANT varValue;
try
{
//打开表
hres = m_pRecordset->Open(bstrQuery,bstrCource,adOpenDynamic,adLockBatchOptimistic,adCmdText);
if (!SUCCEEDED(hres))
{
m_strErrorMsg = _T("打开表失败");
return FALSE;
}
else
{
//计算添加记录的行数
int nRosNum = (int)(strCloumValue.GetCount()/nCloumNum);
if(nRosNum <= 0 )
{
m_strErrorMsg = _T("参数个数错误");
AfxMessageBox(_T("输入参数错误,请重新输入"));
r