转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
ADO & ADO.NET中使用存储过程的两个共用的函数         ★★★★

ADO & ADO.NET中使用存储过程的两个共用的函数

作者:闵涛 文章来源:闵涛的学习笔记 点击数:864 更新时间:2009/4/23 10:50:35

在ADO环境下,调用存储过程查询数据时常规做法为:
1 创建Connection Command对象
2 打开连接,给Command赋参数的名称、数据类型、值
3 执行Command对象
4 返回给Recordset对象交给客户端
这样做每调用一次存储过程都要按照存储过程中的参数的数据类型创建Parameters对象
比如存储过程需要两个参数 @ID int、@Name varchar(10)就需要
‘创建参数
cmd.Parameters.Append cmd.CreateParameter("@ID",adInteger,adParamInput,4)
cmd.Parameters.Append cmd.CreateParameter("@Name",adVarChar,adParamInput,10)
‘给参数赋值
cmd("@State") = 1
cmd("@WhereT")=”2”
每调用一个存储过程都要手工添加这个存储过程的所有参数,用自己的脑力保证参数的数据类型和存储过程中的参数的信息的一致性。
Command.Parameters对象有一个Refresh方法,这个方法的作用时读取当前Command对象需要的所有参数的名称和数据类型,用这个方法就可以写成一个调用所有存储过程的共用函数,现面这个函数完成了一个返回结果集的存储过程的通用函数。很简单可以根据需要细化。

在VisualBasic6.0调试通过。
Function GetRsByPro(strConnString As String, strProName As String, arjParameter() As String)
    ''''   返回 查询的记录集
    ''''   strConnString  数据连接串
    ''''   strProName     存储过程名
    ''''   arjParameter() 存储过程需要的数组
    On Error GoTo errMsg
    ''''创建ADO对象
    Dim Cmd As New Command
    '''' ASP Con = Server.CreateObject("ADODB.Connection")
    Dim Con As New Connection
    '''' ASP Set Cmd = Server.CreateObject("ADODB.Command")
    Dim Rs As New Recordset
    '''' ASP Set rs = Server.CreateObject("ADODB.Recordset")
   
    ''''打开数据库
    Con.Open strConnString
    Set Cmd.ActiveConnection = Con
    Cmd.Commandtype = adCmdStoredProc
    Cmd.Parameters.Refresh
    If UBound(arjParameter) <> Cmd.Parameters.Count Then
        Debug.Print "参数个数不对"
        Exit Function
    End If
   
    ''''给存储过程参数赋值
    For i = 0 To Cmd.Parameters.Count - 1
        Cmd.Parameters(i).Value = arjParameter(i)
    Next
   
    ''''设置Recordset对象
    Rs.CursorType = 3
    Rs.LockType = 3
    Rs.CursorLocation = 3
    Set Rs.Source = Cmd
    Rs.Open
   
    ''''返回结果集
    Set GetRsByPro = Rs
   
    ''''关闭数据源
    Con.Close
    Set Con = Nothing
errMsg:
    Debug.Print Err.Description
End Function

‘调用Demo
Dim Rs As New Recordset
StrConnString=””
StrProName=”pro_GetAllUser”
Dim arjParameter(1)
arjParameter(0)=”1”
arjParameter(1)=”山东”
Set Rs= GetRsByPro(strConnString, strProName, arjParameter())

用相同的方法在.NET开发环境里也可以建立一个通用的方法调用存储过程。
在ADO.NET里不管是OleDbCommand.Parameters对象还是SqlCommand.Parameters对象都没有Refresh方法读取存储过程的参数信息,.NET在OleDbCommandBuilder类里提供了一个DeriveParameters静态方法可以实现相同的功能。
.NET SDK里关于DeriveParameters的描述
“使用在 SqlCommand 中指定的存储过程的参数信息,填充指定的 SqlCommand 对象的 Parameters 集合。”

SqlConnection Conn=new SqlConnection(cnString);
Conn.Open();
SqlCommand Comm=new SqlCommand();
Comm.Connection =conn;
Comm.CommandType =CommandType.StoredProcedure ;
Comm.CommandText =proName;
SqlCommandBuilder.DeriveParameters(comm);
//经过这个方法后SqlCommand对象的SqlParameters对象已经帮定了存储过程中的信息了
实现执行任意一个存储过程返回一个DataSet对象的具体函数代码
文件名 :TestSqlAccess.cs
// 在vs.net调试通过
using System;
using System.Data;
using System.Xml;
using System.Data.SqlClient;
using System.Data.OleDb ;
using System.Collections;

namespace Erp
{
public sealed class TestSqlAccess
{
#region 获取存储过程参数集合
public static SqlParameter [] getParameters(string cnString,string proName)
{
SqlConnection conn=new SqlConnection(cnString);
conn.Open();
SqlCommand comm=new SqlCommand();
comm.Connection =conn;
comm.CommandType =CommandType.StoredProcedure ;
comm.CommandText =proName;

SqlCommandBuilder.DeriveParameters(comm);
SqlParameter [] arPrm=new SqlParameter[comm.Parameters.Count];
for (int i=0;i<comm.Parameters.Count;i  )
{
arPrm[i]=new SqlParameter();
arPrm[i].SqlDbType =comm.Parameters[i].SqlDbType ;
arPrm[i].ParameterName=comm.Parameters[i].ParameterName;
arPrm[i].Size =comm.Parameters[i].Size;
}
return arPrm;
}
#endregion


#region 执行Command对象返回DataSet


/////可以调用微软提供的那个SqlHelper类..

#endregion 执行Command对象返回DataSet



       


[C语言系列]NET 中C#的switch语句的语法  [Sql Server]Sql精妙语句--各种求值函数
[网页制作]网页表格之---多个表格纵向排列  [网页制作]JavaScript另类用法--读取和写入cookie
[网页制作]号称非常安全的上网工具---360安全浏览器介绍  [办公软件]信息技术教学篇---Word工具栏的显示、隐藏及四种菜…
[操作系统]开始菜单---运行命令大总结  [操作系统]网络转载---64位操作系统与32位的区别
[操作系统]ldap:///(没有响应)Windows无法访问指定设备、路径…  [网络技术]安全篇---交换机设置方法介绍
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台