我是一个新手,刚开始学习ADO技术,在VC编程的应用中碰到以下问题。将_CommandPtr对象的CommandText设置为 CommandText = " "; 形式的字符串命令可以访问数据库并完成向表中插入"test"字符串的操作,代码如下:void DBtest(CString value)
{
::CoInitialize(NULL);//初始化com环境

p_conn.CreateInstance(__uuidof(Connection));
p_conn->Open(L"Provider=SQLOLEDB.1;Data Source=localhost", L"ID", L"pin", adOpenUnspecified);//连接数据库
p_cmd.CreateInstance(__uuidof(Command));
p_cmd->ActiveConnection = p_conn;
try
{
//问题出在这里//////////////////////////////////////////////////////////////////////

p_cmd->CommandText = "inert into TestDB.dbo.test values('test')"; //插入
p_cmd->Execute(NULL,NULL,NULL); 

/////////////////////////////////////////////////////////////////////////////////
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
p_conn->Close();
::CoUninitialize();
}但是如果在这个函数中我需要向数据库的表中插入一个变量(比如函数传进来的参数value)就不知道怎么办了。我试验了如下方法都不成功:1. CString str;
str.Format("inert into ServerLog.dbo.ServerLog values('%s')", value);
p_cmd->CommandText = str; //插入
p_cmd->Execute(NULL,NULL,NULL); 
//会报错commandtext和str类型不匹配,但是我强制转换类型以后会在运行的时候出错2. p_cmd->CommandText = "inert into TestDB.dbo.test values('"+ value +"')"; //插入
p_cmd->Execute(NULL,NULL,NULL); 
//同样会说类型不匹配记得在VB中使用第二中方法就可以成功的,不知道VC中应该怎样做才能把一个变量的值插入数据库呢?需要用到Recordset对象吗?谢谢大家!

解决方案 »

  1.   

    CommandText的类型不是CString啊,好像是_bstr_t你用str.operator LPCTSTR()试试
      

  2.   

    我试过LPCTSTR()了,只要命令字符串中要用到变量传进来的值就会失败,错误代码3092“安全数据库中找不到这台计算机的帐户。 ”,但是如果字符串中没有变量传值比如“insert into dbo.test values('test') ”就能将‘test’插入数据库我也用_bstr_t强制转换过类型,同样会出错。到底该怎么办呢?单单就这个应用来说也就是如果想把变量的值插入数据库大家一般会怎么做呢?
      

  3.   

    问题解决了  汗颜阿修改如下:p_cmd->CommandText = "insert into test values('"+(_bstr_t)value+"')";
    p_cmd->Execute(NULL,NULL,NULL);