用ADO连SQL Server数据库执行数更新数据库字段时,只有"Update表Set字段=值"中的“值”为数字时才能更新,只要有字母就不能成功,为何??!!
我是这样做的:
1、在ReadApp中声明:
_ConnectionPtr m_pConnection;//连接对象
_RecordsetPtr m_pRecordset;//数据集
_CommandPtr m_pCommand;//命令对象
2、连数据库;
3、写执行SQL语句函数:
int CReadApp::ExecSql(CString strSql)
{
try
{
_variant_t RecordsAffected;
m_pRecordset = m_pConnection->Execute((_bstr_t)
strSql,&RecordsAffected,adCmdText);
return 1;
}
catch(_com_error error)
{
AfxMessageBox("数据库执行失败!");
//m_pRecordset = NULL;
return 0;
}}
4、执行字段更新操作:
void CPageSec::OnHideRun()
{
// TODO: Add your control notification handler code here
CString strSql,strValue,strKey,strPath,strReg; if(!m_bHideRun)
{
strSql = "update tab_computer_set set hiderun = abc";
//注:该语句执行失败,若“abc”改为任意数字(不能太长),则成功
//即使字符串abc打上双引号执行也会失败
}
else
{
strSql = "update tab_computer_set set hiderun = NULL";
//注:该语句可成功执行
} ((CReadApp*)AfxGetApp())->ExecSql(strSql);
}请问大虾们,这是为何?
我是这样做的:
1、在ReadApp中声明:
_ConnectionPtr m_pConnection;//连接对象
_RecordsetPtr m_pRecordset;//数据集
_CommandPtr m_pCommand;//命令对象
2、连数据库;
3、写执行SQL语句函数:
int CReadApp::ExecSql(CString strSql)
{
try
{
_variant_t RecordsAffected;
m_pRecordset = m_pConnection->Execute((_bstr_t)
strSql,&RecordsAffected,adCmdText);
return 1;
}
catch(_com_error error)
{
AfxMessageBox("数据库执行失败!");
//m_pRecordset = NULL;
return 0;
}}
4、执行字段更新操作:
void CPageSec::OnHideRun()
{
// TODO: Add your control notification handler code here
CString strSql,strValue,strKey,strPath,strReg; if(!m_bHideRun)
{
strSql = "update tab_computer_set set hiderun = abc";
//注:该语句执行失败,若“abc”改为任意数字(不能太长),则成功
//即使字符串abc打上双引号执行也会失败
}
else
{
strSql = "update tab_computer_set set hiderun = NULL";
//注:该语句可成功执行
} ((CReadApp*)AfxGetApp())->ExecSql(strSql);
}请问大虾们,这是为何?
首先你要确定你所更新的字段的类型,若为int型当然是放不进去字符串的。
若为char 或 varchar 类型,则因该将结果用单引号括起来,如‘abc';也可以
声明一个变量赋给要更新的字段。两种方法都可以的。
strSql = "update tab_computer_set set hiderun = ‘abc‘";现在你再试一下。
{
_variant_t RecordsAffected;
m_pRecordset = m_pConnection->Execute((_bstr_t)
strSql,&RecordsAffected,adCmdText);
return 1;
}
catch(_com_error error)
{
AfxMessageBox("数据库执行失败!");
//m_pRecordset = NULL;
return 0;
}
将try{……}中的 "return 1" 放到catch{……}后面。避免错误没有被
处理就返回,导致出错。