最简单的vc++调用存储过程实例(有参无参)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
char bstrConnect[150] = "Provider=SQLOLEDB.1;Integrated Security=SSPI; \ Persist Security Info=False;Initial Catalog=xiali;Data Source=(local)"; char bstrEmpty[2]=""; _variant_t vtEmpty = new _variant_t(); //----------------------------------------------------------------------------try { Conn1.CreateInstance(__uuidof(Connection)); if( Conn1->Open( bstrConnect,bstrEmpty,bstrEmpty, adOptionUnspecified) ==0 ) {
//////////////////////////////////////////////////////////////////////////////////////////// Rs1 = Cmd1->Execute(NULL,NULL,adCmdStoredProc);
//////////////////////////////////////////////////////////////////////////////////////////// int count = 1; while (! Rs1->EndOfFile ) { printf("%d \n",count); Rs1->MoveNext(); count++;//统计表中记录个数 }
Rs1->MoveNext(); count++;//统计表中记录个数 } } catch (_com_error &e ) { printf("Error:\n"); printf("Code = %08lx\n", e.Error()); printf("Meaning = %s\n", e.ErrorMessage()); printf("Source = %s\n", (LPCSTR) e.Source()); printf("Description = %s\n", (LPCSTR) e.Description()); }//其实这个 catch 中内容很是强大,各种错误都能描述,比如找不到表啊什么的 ::CoUninitialize(); return 0; }
system("pause"); printf("open connection .... \n\n"); } // Cmd1->Parameters->Append(Param1);//parameter 是 command 用于查询的参数 //所以,存储过程不需要参数,就不用 append 这个 parameter 到 command 对象 Cmd1.CreateInstance(__uuidof(Command)); Cmd1->ActiveConnection = Conn1 ;//命令对象必须与连接对象关联 Cmd1->CommandText = _bstr_t("mysp_all");//sp name Cmd1->CommandType = adCmdStoredProc;// commandType 表明是存储过程 if( FAILED( Rs1.CreateInstance(__uuidof(Recordset)) ) )//创建 Rs1 printf("ri ,shi bai le \n\n"); //////////////////////////////////////////////////////////////////////////////////////////// Rs1 = Cmd1->Execute(NULL,NULL,adCmdStoredProc);//执行存储过程 //////////////////////////////////////////////////////////////////////////////////////////// //------------------------------------------------------------------int count = 1; while (! Rs1->EndOfFile ) { printf("%d \n",count);
inline void TESTHR(HRESULT _hr) { if FAILED(_hr) _com_issue_error(_hr); }
class CCustomRs : public CADORecordBinding
{
BEGIN_ADO_BINDING(CCustomRs)
ADO_VARIABLE_LENGTH_ENTRY2(2,
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile")
#include <icrsint.h> #include <stdio.h>
_COM_SMARTPTR_TYPEDEF(IADORecordBinding, __uuidof(IADORecordBinding));
Cmd1->ActiveConnection = Conn1 ; Cmd1->CommandText = _bstr_t("mysp_para");//sp name Cmd1->CommandType = adCmdStoredProc;
if( FAILED( Rs1.CreateInstance(__uuidof(Recordset)) ) )//创建 Rs1 printf("ri ,shi bai le \n\n");
详细步骤如下:
1、 首先在数据库下新建表 AjaxCity 本人 SQLServer 目录如下:
表内容仅供参考:
2、 新建存储过程 mysp_all,如图
(存储过程的写法,有需要请百度。) 这个过程是选择出 AjaxCity 所有元素并返回记录集
3、 Vc6 中直接新建 win32 控制台程序的空工程,添加文件 hello.cpp,添加代码如下:
5、 Hello.cpp 中 try 括号内的内容改为如下代码:(加粗部分为与上面代码不同的地方) Conn1.CreateInstance(__uuidof(Connection)); if( Conn1->Open(bstrConnect,bstrEmpty,bstrEmpty,adOptionUnspecified) ==0 ) { system("pause"); printf("open connection .... \n\n"); } Conn1->CursorLocation = adUseClient ;//adUseClient 使用由本地游标库 提//供的客户端游标。本地游标引擎通常允许使用的许多功能可能是驱 动程//序提供的游标无法使用的,因此使用该设置对于那些将要启用的 功能//是有好处的
//以上代码也可以直接从 MSDN 的 ADO 帮助里面直接拷贝,这里因为 mysp_all 不需要传 入参数,所以可以不用创建 parameter 参数
执行结果如下:
4、 为示范参数的最简单使用,按上面步骤,创建一个新的存储过程 mysp_para,这个 需要传入 cityname 的参数,返回和 cityname 相同的那条记录。代码如下:
END_ADO_BINDING()
public:
CHAR m_ch_fname[22]; CHAR m_ch_lname[32]; ULONG m_ul_fnameStatus; ULONG m_ul_lnameStatus; }; //====================================================================== int main() { ::CoInitialize(NULL); _ConnectionPtr Conn1; _CommandPtr Cmd1; _RecordsetPtr Rs1; ParametersPtr *Params1 = NULL ; _ParameterPtr Param1; //-----------------------------------------------------------------------------
来自百度文库
adVarChar,
m_ch_fname,
sizeof(m_ch_fname), m_ul_fnameStatus, false)
ADO_VARIABLE_LENGTH_ENTRY2(4, adVarChar, m_ch_lname, sizeof(m_ch_lname),
m_ul_lnameStatus, false)
//--------------------------------------------------------------Cmd1.CreateInstance(__uuidof(Command)); system("pause"); printf("command type .... \n\n"); Param1 = Cmd1->CreateParameter(_bstr_t(bstrEmpty),//创建 Parameter 对象 adInteger, adParamInput, -1, _variant_t((long)5)); Param1->Value = _variant_t(long(5)); Param1->Name = "成都";//存储过程参数名称
开发环境:SQL Server2000,Visual C++6.0 简单说明: 1、本程序是最简单的控制台示范程序,示范代码从 MSDN 中拷得,调试可以运行,添加详 细注解 。如要源码,可邮件至:xialia8@163.com 2、最简单的示范了有参数和无参数情况下,存储过程的调用情况,希望对新学习的有所帮 助。最初学习的时候,也搜了很多东西才完成
Param1->Type = adChar ;//参数类型 Param1->Size = 32;//参数大小
Cmd1->Parameters->Append(Param1);//parameter 是 command 查询的参数
system("pause"); printf("create paramater .... \n\n");
printf("%d \n",count);//显然这里只有一个,为了防止输不出来,我们选择这样 执行结果如下:
相关文档
最新文档