1.SQL Server中每张表的记录数大约控制在多少不会影响系统性能;
2.VC+SQL Server中CommandPtr的用法,我用来执行存储过程,老是报参数过多,然后退出!:Sample
PROC_PLRK @pIn1 varchar(50),@pIn2 smallint,@pOut small OUTPUT问题是第一次成功,第二次就报以上错误,有没有做过类似开发的给点提醒或者给段代码,我的代码大致是对CommandPtr指针的Parameters参数进行赋值,关键是如何做,程序逻辑?
if (mydlg.DoModal()==IDOK)
{
.............?
pCmd->Execute(,,)
}
2.VC+SQL Server中CommandPtr的用法,我用来执行存储过程,老是报参数过多,然后退出!:Sample
PROC_PLRK @pIn1 varchar(50),@pIn2 smallint,@pOut small OUTPUT问题是第一次成功,第二次就报以上错误,有没有做过类似开发的给点提醒或者给段代码,我的代码大致是对CommandPtr指针的Parameters参数进行赋值,关键是如何做,程序逻辑?
if (mydlg.DoModal()==IDOK)
{
.............?
pCmd->Execute(,,)
}
解决方案 »
- 在ActiveX控件中怎样开辟一个缓存区
- ado access 部分列查询错误,程序中止退出。
- CrichEditView禁止OLe托拽?急...............
- 如何在Browseinfo生成的“浏览文件夹”中添加一个“包括子目录”的复选框
- 获取上网时间
- 请教如何控制float类型变量的精度,即如何控制小数点后的位数
- 如何实现FlashGet用来显示下载情况的浮动窗口???
- 用API怎么调用我写的COM
- 请教如何在一个EDIT文本框中显示时间,要实时刷新
- 我在程序中申明一个变量 string strTemp,但是编译不过,是不是我没有包含关于string的头文件呀?
- 使用过解霸的朋友请进来帮我解决下这个问题,急!
- 和大家探讨一下,vc++和c#的话题。
2、VC不熟,但我想ADO是一样的,每次调用pCmd->Execute(,,)前,对pCmd进行重新生成,或者只有第一次调用CreateParameter 方法,以后就只设置参数的值旧可以了。我估计是你每次都调用CreateParameter 方法,那样第二次调用pCmd->Execute(,,)时,你的参数数量就DOUBLE了。
2.说得有道理,可是每次我都用pCmd->Prarmeters->Refresh(),还是没有用;
怎么解决呢,有没有做过Ado访问SQL Server的?
第二个问题我还是不太明白,我在调用的代码段对参数进行了
pCmd->Parameters->Refresh();
但还是会报错?后来我把AddParameters()函数放到父窗口的OnInitialUpdate
还是没有通过?到底要怎样才能正确使用SQL+ADO+VC的存储过程呢?
大家来谈谈吧!
2。
hr = pICommandText->QueryInterface(IID_ICommandProperties,
(void **)&pICommandProperties);
if (FAILED(hr))
{
printf("Failed to get ICommandProperties to set rowset properties.\n");
//Release any references and return.
goto Exit;
} //end if
hr = pICommandProperties->SetProperties(cPropSets, rgPropSets);
if (FAILED(hr))
{
printf("Execute failed to set rowset properties.\n");
//Release any references and return.
goto Exit;
} //end if
//从数据库种抽取数据项目
strcpy(chrFilterSQL,"SELECT * FROM photo WHERE phtid=");
strcat(chrFilterSQL,NewID);
MultiByteToWideChar (CP_ACP, 0, chrFilterSQL, -1, strFilterSQL, 100);
//以上代码是过滤条件 hr = pICommandText->SetCommandText(DBGUID_DBSQL,strFilterSQL);
if (FAILED(hr))
{
printf("Failed to set command text SELECT * FROM.\n");
//Release any references and return.
goto Exit;
} //end if
hr = pICommandText->Execute(NULL, IID_IRowsetChange, NULL, NULL,
(IUnknown**)&pIRowsetChange);
if (FAILED(hr))
{
printf("Failed to execute the command SELECT * FROM.\n");
//Release any references and return.
goto Exit;
} //end if
ADO我也用过
我的指行方法很简单,关键是第二次就报参数错误!
这是我写的代码
try
{
m_pCommand->Parameters->Item[ _variant_t( (long) 1 ) ]->Value = _variant_t((long)(GID) );
m_pCommand->Parameters->Item[ _variant_t( (long) 2 ) ]->Value = _variant_t( (DataTime));
m_pCommand->Parameters->Item[ _variant_t( (long) 3 ) ]->Value = _variant_t( (long)(Lon) );
m_pCommand->Parameters->Item[ _variant_t( (long) 4 ) ]->Value = _variant_t( (long)(Lat) );
m_pCommand->Parameters->Item[ _variant_t( (long) 5 ) ]->Value = _variant_t( (long)(Status) );
m_pCommand->Parameters->Item[ _variant_t( (long) 6 ) ]->Value = _variant_t( (long)(Velocity) );
m_pCommand->Execute( &vtEmpty, &vtEmpty2, adCmdStoredProc );
}
catch(_com_error &e)
{
AfxMessageBox(e.ErrorMessage());
}
其中 &vtEmpty, &vtEmpty2, 需要声明
_variant_t vtEmpty (DISP_E_PARAMNOTFOUND, VT_ERROR);//调用存储过程的两个参数
_variant_t vtEmpty2(DISP_E_PARAMNOTFOUND, VT_ERROR);//调用存储过程的两个参数
调用存储过程需要联结数据库
m_pConnection = NULL;
m_pCommand = NULL;
_bstr_t bstrProc =( L"data_proc" );; //Stored procedure name
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pCommand.CreateInstance(__uuidof(Command));//m_pRecordset m_pConnection->ConnectionString = _bstr_t(m_strConnect1);
m_pConnection->Open("","","",NULL); m_pCommand->ActiveConnection = m_pConnection;
m_pCommand->CommandText = _bstr_t( bstrProc ); // passing the stored procedue
m_pCommand->CommandType = adCmdStoredProc; // type
m_pCommand->Parameters->Refresh(); }
catch(_com_error &e)
{
e.ErrorMessage();
AfxMessageBox("数据库连接失败\n 请重新连接");
}