小弟在vc中调用存储过程add_admin
存储过程代码如下:PROC add_admin
@id char(20),
@password char(10)
AS 
INSERT INTO administrator
(administrator_id, administrator_password)
VALUES
(@id, @password)
存储过程在sql server下运行无错
vc中继承下来的CRecordset没有改动,绑定数据列id char(20), password char(10),不论选取dynaset 还是snapshot,
view继承自CFormView,在里面添加button,并响应单击事件代码如下:
void CMyView::Button()
{
CMyset cset;
cset.Open(AFX_DB_USE_DEFAULT_TYPE,"{call add_admin('safaffa', 'jjj')}");
cset.Close(); }
运行后发现记录已经添加进数据库,但是发生异常!!
发生异常的代码在RFX_TEXT()中case CFieldExchange::BindFieldToColumn:
{
// Assumes all bound fields BEFORE unbound fields
CODBCFieldInfo* pODBCInfo =
&pFX->m_prs->m_rgODBCFieldInfos[nField - 1];
该行停止-----------------UINT cbColumn = pODBCInfo->m_nPrecision;不知道是怎么回事,另外请各位大哥知道怎样在vc调用带输出参数的存储过程的贴出具体方法!!谢谢了

解决方案 »

  1.   

    没有还回记录集的存储过程,可以直接用:
    CDatabase::ExecuteSQL("....")调用
    因为没有记录集返回,所以出错
      

  2.   

    CString s;
    CDatabase db;
    db.Open(...);
    s.Format("add_admin '%s','%s'","aa","111");
    db.ExecuteSQL(s);
      

  3.   

    你用
    TRY
    {
         cset.Open(AFX_DB_USE_DEFAULT_TYPE,"{call add_admin('safaffa', 'jjj')}"); 
    }
    CATCH_ALL(e)
    {
    }
    END_CATCH_ALL
    关于怎样在vc调用带输出参数的存储过程我现在正在苦恼中,如果你有了答案告诉我好吗?
    http://expert.csdn.net/Expert/topic/1726/1726729.xml?temp=.7379572