首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

用OLEDB为何rs.Insert(0)都不插不进SQL2000数据

2013-07-01 
用OLEDB为什么rs.Insert(0)都不插不进SQL2000数据我在SQL2000里建了一个表雇员 字段名称-类型 雇员ID-

用OLEDB为什么rs.Insert(0)都不插不进SQL2000数据
我在SQL2000里建了一个表"雇员" 字段名称->类型 雇员ID->Int,姓名->char,卡号->char,头衔->char,尊称->char,出生日期->Datetime,雇用日期->Datetime,地址->char,地区-char,,国家->char,电话->char,上级->char,部门ID->int.
程序带码如下:
第一个函数
void COLEDB_MFCView::OnEmployeeRegister() 
{
// TODO: Add your command handler code here
CStringArray saDeptArray;
CUIntArray  uaDepartID;
 if (!GetDeptArray(uaDepartID,saDeptArray)) return;
CEmplReglDlg  EmplRegiDlg;
EmplRegiDlg.m_saDepartment.Append(saDeptArray);
EmplRegiDlg.m_uaDepartID.Append(uaDepartID);
if (IDOK==EmplRegiDlg.DoModal()) {
CStringArray saValue;
saValue.Add(EmplRegiDlg.m_strCardNo);
saValue.Add(EmplRegiDlg.m_strName);

saValue.Add(EmplRegiDlg.m_strTitle);
saValue.Add(EmplRegiDlg.m_strRespect);
saValue.Add(EmplRegiDlg.m_strBirthday);
saValue.Add(EmplRegiDlg.m_strHireDate);
saValue.Add(EmplRegiDlg.m_strAddress);
saValue.Add(EmplRegiDlg.m_strDistrict);
saValue.Add(EmplRegiDlg.m_strCountry);
saValue.Add(EmplRegiDlg.m_strTeleNo);
saValue.Add(EmplRegiDlg.m_strSupervisor);
saValue.Add(EmplRegiDlg.m_strDeptName);

CString strTableName=_T("dbo.雇员");
if (!InsertRecord(strTableName,saValue)) {
MessageBox("新员工登记操作失败!");
return;
}
}

}
第二个函数
BOOL COLEDB_MFCView::InsertRecord(CString strTableName,CStringArray &saValue)
{
if (0==saValue.GetSize()) return FALSE;
if(strTableName.IsEmpty()) return FALSE;
USES_CONVERSION;
CCommand<CManualAccessor> rs;
TCHAR(*lpszColumns)[50]=NULL;
CString m_strQuery;
m_strQuery.Format("select * from %s",strTableName);
ULONG ulFields=1+saValue.GetSize();
//ULONG ulFields=saValue.GetSize();

TRY{
UpdateData(TRUE);
lpszColumns=new TCHAR[ulFields][50];
rs.CreateAccessor(ulFields,&lpszColumns[0],sizeof(TCHAR)*50*ulFields);
for(ULONG l=0;l<ulFields;l++)
rs.AddBindEntry(l+1,DBTYPE_STR,40,&lpszColumns[l]);
//CoInitialize(NULL);
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_CANFETCHBACKWARDS, true);
propset.AddProperty(DBPROP_IRowsetChange,true);
propset.AddProperty(DBPROP_UPDATABILITY,DBPROPVAL_UP_CHANGE|DBPROPVAL_UP_INSERT|DBPROPVAL_UP_DELETE);
rs.Create(m_Session,m_strQuery);
rs.Prepare();
HRESULT hOpen=rs.Open(&propset);
if(hOpen!=S_OK)
    AfxThrowOLEDBException(rs.m_spRowset,IID_IRowset);
rs.MoveLast();
for(ULONG i=1;i<ulFields;i++)
_tcsncpy(lpszColumns[i],saValue.GetAt(i-1),50);


HRESULT hResult=rs.Insert(0);
if(hResult!=S_OK)
AfxThrowOLEDBException(rs.m_spRowset,IID_IRowsetChange);
if(lpszColumns!=NULL)
{
delete[ulFields]lpszColumns;
lpszColumns=NULL;
}


}
CATCH(COLEDBException,e)
{
if(lpszColumns!=NULL)
delete[ulFields]lpszColumns;
e->ReportError();
return FALSE;
}
END_CATCH;
return TRUE;
}
检查了N篇了,HRESULT hResult=rs.Insert(0);
就是插不进数据.
[解决办法]

try
{
if (m_Recordset)
{
if (m_Recordset->State == adStateOpen)
m_Recordset->Close();
}
else
{
m_Recordset.CreateInstance(__uuidof(Recordset));
}

m_Command->ActiveConnection = m_Connection;
m_Command->CommandType = adCmdText;
m_Command->CommandText = (_bstr_t)(szSql);

_variant_t vNull;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;

m_Command->Execute( &vNull, &vNull, adCmdText );
}

我刚刚在自己的ado程序里面insert into upinfo values('E:\\bbb.txt','123','123456')插已个表都成功了
[解决办法]
字符串要加单引号'',日期要加#,比如:
str="insert into 表名 values('字符型值',#2012-11-24 17:24#);
你单步执行看看插入字符串的数据是不是类似这种格式

热点排行