用ado的recordset.open方法怎样得到系统存储过程里的信息

AllRegistered 2003-12-10 06:00:28
比如sp_help_jobschedule,我执行成功了,但取不出Recordset里面的信息,即系统帮助信息,不用带参数的,直接取那些信息可以吗?
...全文
43 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
checkyvc6 2003-12-10
  • 打赏
  • 举报
回复
如果程序过程返回记录集的话,可以用
_RecordsetPrt pRs;
pRs=cmd->Execute(NULL, NULL, adCmdStoredProc);
通过pRs来访问结果

AllRegistered 2003-12-10
  • 打赏
  • 举报
回复
我知道这个带参数的方法,问题是我怎么传参数呢?sp_help之类的返回一个结果集,我想得到那个结果集
里某个column的值,我如何处理呢?
cdwy411 2003-12-10
  • 打赏
  • 举报
回复
CString ExecStoreProc(int id)
{
_CommandPtr cmd;
cmd.CreateInstance("ADODB.Command");
//id号
_ParameterPtr pParamRk;
pParamRk.CreateInstance("ADODB.Parameter");
pParamRk->Name="job_id"; //存储过程的参数1
pParamRk->Type=adInteger; //整型
pParamRk->Size=2; //
pParamRk->Direction=adParamInput;//表明是输入参数
CString tstr;
tstr.Format("%d",id);
pParamRk->Value=_variant_t(tstr);//int->CString->_variant_t后赋值
cmd->Parameters->Append(pParamRk);
//返回值
_ParameterPtr pParamOk;
pParamOk.CreateInstance("ADODB.Parameter");
pParamOk->Name="desc"; //参数2名称
pParamOk->Type=adChar; //字符串
pParamOk->Size=20; //大小为20个字节
pParamOk->Direction=adParamOutput; //声明是输出参数
cmd->Parameters->Append(pParamOk);
//_variant_t TheValue = MySet->GetCollect("FIELD_1");
//CString sValue=(char*)_bstr_t(TheValue);

cmd->ActiveConnection = piConnection;
cmd->CommandText="test"; //存储过程的名字
cmd->CommandType=adCmdStoredProc;//表示为存储过程adCmdStoredProc
//执行,获得结果
cmd->Execute(NULL, NULL, adCmdStoredProc);
//将值返回
return (char*)_bstr_t(pParamOk->Value);
}
蓝焰设计站图文管理系统 论文 ASP.NET的网站新闻管理系统设计与实现 【摘要】利用ASP.NET和ADO.NET技术开发的网站新闻管理系统,实现了网站新闻的动态管理,使得对信息的管理更加及时、高效,提高了工作效率。同时对系统的开发原理、系统的功能特点和设计方案进行了介绍。 【关键词】ASP.NET ADO.NET 新闻 管理 数据库 随着Internet的普及,越来越多的企业建立了自己的WWW网站,企业通过网站可以展示产品,发布最新动态,与用户进行交流和沟通,与合作伙伴建立联系,以及开展电子商务等。其中新闻管理系统是构成企业网站的一个重要组成部分,它担负着双层作用,一方面可以用来动态发布有关新产品或新开发项目,另一方面又可以及时向顾客公告企业经营业绩、技术与研发进展、特别推荐或优惠的工程项目、产品和服务,从而吸引顾客,扩大顾客群。 传统的网站新闻管理方式有两种,一是静态HTML页面,更新信息时需要重新制作页面然后上传页面并修改相应链接,这种方式因为效率太低已不多用。二是基于ASP和脚本语言,将动态网页和数据库结合,通过应用程序来处理新闻,这是目前较为流行的做法。但是由于ASP本身的局限性使得系统有一些不可克服的缺陷,而采取了ASP.NET技术的系统性能上有了很大的改善,其主要表现在以下几方面: 1.由于ASP页面每次打开都必须经过先编译后解释的过程,所以页面在反复打开时速度没有任何提升,而ASP.NET页面只需要一次编译后不需要重新编译,直到该页面被修改或Web应用程序重新启动。这使得在多次访问时速度有了极大的提升。 2.由于ASP没有提供任何输出数据为内容的元件,所以在使用ASP撰写数据库页面时只能借助ADORecordSet对象逐笔读取记录,而ASP.NET通过ADO.NET提供的DataGrid等数据库元件可以直接和数据库联系。 3.ASP.NET支持应用程序的实时更新。管理员不必关掉网络服务器或者甚至不用停止应用程序的运行就可以更新应用文件。应用程序文件永远不会被加锁,因此甚至在程序运行时文件就可以被覆盖。当文件更新后,系统会温和地转换到新的版本。 4.ASP.NET采取"code-behind"方式编写代码使得代码更易于编写,结构更清晰,降低了系统的开发与维护的复杂度和费用。 1系统的开发原理 1.1 基于ASP.NET技术的系统结构模型 ASP.NET结构是一个三层系统:UI层、业务逻辑层和数据层,如图1所示。 图1 ASP.NET的系统结构模型 UI层负责与用户交互,接收用户的输入并将服务器端传来的数据呈现给客户。 业务逻辑层负责接收浏览器传来的请求并将请求传给数据层,同时将请求处理结果发给浏览器。它由Web表单、XML Web服务和组件服务组成。其中Web表单是ASP.NET应用程序的核心所在,它是向客户呈现数据和信息的基础,也是响应和处理客户与显示的Web表单交互生成的信息和数据的基础。 数据层是通过ADO.NET操纵数据为事务逻辑层提供数据服务,如存储数据操作结果、返回数据检索结果等。 1.2 ADO.NET访问数据库的原理 与数据库相连,ADO.NET提供了如下3种方式:通过ODBC相连;通过OLEDB相连;直接与SQL Server相连。3种方式由于应用层次的差异,使得效率由低到高,独立性由高到低。对于相连数据库的数据处理,也有2种方式,即一种是通过DataSet来隔离异构的数据源,另一种是以流方式从数据源读取(DataReader方式)。 传统的应用程序是通过先建立到数据库的连接,在程序的整个运行过程中维护连接的方式来设计的。ASP.NET采取了断开连接方式的数据结构。当浏览器向Web服务器请求网页时,服务器处理这个请求,并将所请求的网页发送给浏览器,然后连接就被断开,直到浏览器发出下一个请求。 ADO.NET的另一个创新是引入了数据集(Dataset)。一个数据集是内存中提供数据关系图的高速缓冲区。数据集对数据源一无所知,它们可以由程序或通过从数据仓库中调入数据而被生成、填充。不论数据从何处获取,数据集都是通过使用同样的程序模板而被操作的,并且它使用相同的潜在的数据缓冲区。 2 系统的功能设计 2.1 系统的功能结构 该新闻管理系统可以在Windows 2000 Server操作系统平台上运行,Web服务器为IIS,数据库服务器为Microsoft SQL Server2000,开发工具采用的Microsoft Visual Studio .NET和DreamWeaver。图2给出系统的功能结构图。其工作流程为:用户登录通过权限判断,普通用户只能浏览、阅读和查询新闻,注册用户除了可以完成普通用户的操作外,还可以进入新闻管理模块进行新闻录入、修改和删除的操作。注册用户除系统管理员外只能对自己录入的新闻进行删改操作。 2.2 系统的功能特点 (1)操作简单、界面友好:完全控件式的页面布局,使得新闻的录入工作更简便;许多选项包括新闻类别、来源部门等只需要点击鼠标就可以完成;另外,跟踪出现的提示信息也让用户随时清楚自己的操作情况。 (2)即时可见:对新闻的处理(包括录入、修改、删除)将立即在主页的对应栏目显示出来,达到"即时发布、即时见效"的功能。 图2 系统功能结构图 (3)功能完善:包括常见网站的新闻管理的各个方面:新闻录入、浏览、删除、修改、检索等各个方面,完整地实现了网站对即时新闻的管理要求。 (4)方便移植:针对不同的企业,只需要稍作修改就可以开发出适合本企业特点的网站新闻管理系统! 3 系统的详细设计 系统的主要功能是通过几个功能模块来实现的。具体的设计过程如下: ⑴ 系统登录:该模块负责将用户分为普通用户和注册用户来实现用户权限的管理。 ⑵ 新闻浏览:该模块负责分页列出网站所有新闻的信息,包括标题、类型、来源部门字段及发布日期,每条新闻的标题被做成一个超链接,点击它们就能跳转页面进行新闻阅读。 ⑶ 新闻阅读:在其他页面中点击标题链接即进入新闻阅读页面,此时,每条新闻的详细信息将被取出,包括内容、标题、关键字等,并按照相对固定的格式放置在页面的不同区域,所有新闻使用大致相同的页面布局,只是各字段对应的内容不同而已,另外,页面其它位置,可以动态放置其他元件,如网站标志logo、页面广告banner等链接图片,这样可以很容易地实现图文并茂的阅读效果。 ⑷ 新闻查询:该模块提供了新闻查询功能,输入待查找的内容及选定分类信息可以快速地找到符合条件的新闻,并输出查询结果。 ⑸ 新闻管理:该模块负责分页罗列登录的注册用户曾发布过且未删除的新闻信息,用户可以对该条新闻进行删除、修改。非新闻发布者除系统管理员外不具有对该条新闻的处理权限,所以不同用户进入此页面将显示不同的内容。 ⑹ 新闻录入和修改:注册用户录入一条新闻所需要的内容,包含标题、关键字、类型、来源部门、发布日期等,同时从登录模块得到用户名,这些信息将被写入数据库中保存。该模块还负责编辑状态下的更新,这时,它将根据取得的Title字段值对页面控件初始化。 下面以系统登录页面的编写为例给出主要事件和函数,说明该系统的开发过程。 //IsRegUserOk函数:判断用户是否已经注册和密码是否正确 public bool IsRegUserOk() { string name=TextBoxName.Text.Trim(); string pwd=TextBoxPassword.Text.Trim(); //建立/打开数据库连接 SqlConnection conn=new SqlConnection(); conn.ConnectionString="server=(local);uid=sa;pwd=;database=jxdb"; conn.Open(); //建立sql字符串 string sql="select * from reg where name='"+name+"'"; SqlDataReader dr; SqlCommand cmd=new SqlCommand(sql,conn); dr=cmd.ExecuteReader(); //保留用户注册与否信息 bool isRegUserExist=dr.Read(); //关闭DataReader dr.Close(); //取得用户名的密码 string sqlBoth="select * from reg where name='"+name+"'"; sqlBoth+="and pwd='"+pwd+"'"; SqlCommand cmdBoth=new SqlCommand(sqlBoth,conn); SqlDataReader drBoth; drBoth=cmdBoth.ExecuteReader(); //保留用户名+密码同时存在信息 bool isBothExist=drBoth.Read(); //关闭DataReader drBoth.Close(); conn.Close(); //判断用户是否注册 if(!isRegUserExist) { Response.Write("<script>alert('此用户尚未注册!')"); return false; } //判断用户名与密码是否一致 else if(!isBothExist) { Response.Write("<script>alert('用户名和密码不一致,不能进入!')"); return false; } else return true; } 最后给出系统后端数据存储方案: 利用Microsoft SQL Server 2000建立数据库及其存储过程。这给出两个必需的数据表,一是数据表News包含的字段有:编号、姓名、标题、关键字、内容、类型、来源部门和日期。字段说明如下: 二是数据表Reg包含的字段有:编号、姓名、密码、所属部门、电子邮箱和电话。字段说明如下: 参考文献 [1]天极网新技术研究室.《ASP.NET完全入门》.重庆出版社,2001 [2]Scott Worley著.《ASP.NET技术内幕》.王文龙 刘湘宁译.人民邮电出版社,2002 [3]Sanjeev Rohilla, Senthil Nathan, Surbhi Malhotra著.《ADO.NET专业项目实例开发》.陈君 王宝良译.中国水利水电出版社,2003 [4]丁晟春 王曰芬.网站新闻发布管理系统的设计与应用.现代图书情报技术.2002,5 [5] 手机铃声下载 网站优化网站推广 免费论文下载 职称论文下载
第五部分、操作人员管理设计说明 操作人员维护模块的运行界面如图18所示 图18 操作人员维护界面 操作人员管理系统主要是用来管理对该软件进行操作的工作人员,同时系统所提供的用户权限设置能够提高系统的安全性,并对不同性质的人员给予不同的权限 5.1程序描述 主窗体的代码不是很复杂,界面设计主要是利用了树型控件来实现的 程序模块名称:frmsq; 重要控件:TreeView、图像列表Imagelist等; 相关数据库表:user_load。 该窗体主要实现增加用户、删除用户、对用户进行授权,主要是面向管理人员对操作人员的操作进行管理,满足不同层次的人员对系统不同的需求。 5.2功能 操作人员管理系统主要是用来管理对该软件进行操作的工作人员,同时系统所提供的用户权限设置能够提高系统的安全性,并对不同性质的人员给予不同的权限,为了方便集中管理数据库表和数据源,我们把数据库的连接放到Global.bas模块中,应用ADO接口技术直接和SQL Server 2000数据库服务器建立连接。 5.3性能 精 度:通过鼠标点击或快捷键进入子模块,对在文本框内输入的大小写敏感,姓名和密码都区分大小写 灵 活 性:用户鼠标点击可以进行确认,按E键表示关闭当前窗口; 时间特性:用户输入后的验证时间在1秒之内; 5.4输人项 通过鼠标点击或快捷键。用户输入的姓名,密码字符信息;这些信息系统管理员管理,存储在数据库表中 5.5输出项 提示信息信息符号,参考的输出结果如图19,在屏幕上显示一个对话框: 图19:一个显示删除管理员的对话框信息 5.6算法 该窗体主要实现对用户授权,用户的授权是采用0,1编码来实现的。如果该用户拥有某项权限,则该权限为1;反之,则为0。 5.7流程逻辑 登录组件的逻辑流程如下: 图20:操作人员维护模块数据流程图 5.8接口 接口设计包括组件提供给外部的接口和对数据访问组件的调用接口,这些接口构成了该ActiveX 控件实现的内容,该窗体主要实现增加用户、删除用户、对用户进行授权,主要是面向管理人员对操作人员的操作进行管理,满足不同层次的人员对系统不同的需求。 Private SubCommand3_Click () '删除操作人员的命令按钮 '显示对话框,是否删除操作人员 t = MsgBox("你是否确定删除该操作员!", vbOKCancel, "确定吗?") If t = 1 Then '如果返回1,则进行删除操作 '判断是否有记录,如果没有记录,则提示选择操作人员 If rsdel.BOF = True Or rsdel.EOF = True Then t = MsgBox("请选择操作员姓名!", vbOKOnly, "无记录") Else '否则进行删除,并显示成功删除操作人员对话框 rsdel.Delete t = MsgBox("成功删除操作员姓名!", vbOKOnly, "成功") End If tvwdb.Nodes.Clear '清除TreeView中节点的内容 tvwdb.Sorted = True '设置sorted属性为真 Set mnode = tvwdb.Nodes.Add() mnode.Text = "操作员姓名" '节点显示“操作员姓名” mnode.Image = 2 '设置节点的图表为imagelist1中的图2 Set rspsw = New ADODB.Recordset rspsw.open"select*from user_load",cn,adOpenStatic,adLockPessimistic Do Until rspsw.EOF '用rspsw中的记录对treeview进行加载 Set mnode = tvwdb.Nodes.Add(1, tvwChild) '添加treeview的孩子 mnode.Text = rspsw.Fields("user_name") '使其文本为rspsw字段中的用户名 mnode.Image = 1 '设置节点的图表为imagelist1中的图1 rspsw.MoveNext '记录往后移动一条 Loop Else Exit Sub End If '将用户数据库表中的用户名加载到treeview控件中 Private SubPrivate Sub loadtreeview() tvwdb.Sorted = True '将treeview的排序设为真 Set mnode = tvwdb.Nodes.Add() mnode.Text = "操作员姓名" '节点显示“操作员姓名” mnode.Image = 2 '设置节点的图表为imagelist1中的图2 If cn.State = 1 Then Else Call condatabase '连接数据库 End If Set rspsw = New ADODB.Recordset '打开rspsw记录集 rspsw.open "select * from user_load", cn, adOpenStatic, adLockPessimistic Do Until rspsw.EOF '用rspsw中的记录对treeview进行加载 Set mnode = tvwdb.Nodes.Add(1, tvwChild) '添加treeview的孩子 mnode.Text = rspsw.Fields("user_name") '使其文本为rspsw字段中的用户名 mnode.Image = 1 '设置节点的图表为imagelist1中的图1 rspsw.MoveNext '记录往后移动一条 Loop End Sub Private Sub Form_Load() '窗体加载过程 Call loadtreeview '调用loadtreeview过程 End Sub Private Sub tvwdb_NodeClick(ByVal Node As MSComctlLib.Node) '处理nodeclick事件 If Node.Index = 1 Then '如果只有一个根节点,则退出程序 Exit Sub End If Call check_condatabase '检查是否连接数据库,如果连接了则放弃,否则连接 If Node.Parent.Index = 1 Then '是根节点 nodename = Node.Text '将删除的变量赋值给nodename Set rsdel = New ADODB.Recordset '获得该节点的用户名的所有资料 rsdel.open "select * from user_load where user_name='" & nodename & "'", cn, _ adOpenStatic, adLockPessimistic End If End Sub 5.9存储分配 本程序在高级语言Visual Basic进行编码,直接的内存分配由VB运行时分配。 本组件内所依赖的变量、结构要求全部在组件元素内申明。 5.10注释设计 本部分代码的实现,应按照该注释规范来进行。 5.11限制条件 控件所依赖的的ActriveX DLL prjDBACCESS必须存在。 该控件在使用的时候,必须经过注册,并且在运行时,客户端程序必须安装有VB运行时的动态连接库。 在运行时,用户端的计算机必须有鼠标或触摸板等点输入设备。 5.12测试计划 本模块的输入基本有鼠标点击来完成,不需要特殊的测试用例,在增加管理员是具体的测试用例和登录测试用例相同,这不再一一例举。 5.13尚未解决的问题 本模块的没有尚未解决的问题。

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧