<转>以编程方式获取存储过程的参数信息

蛙蛙推荐:以编程方式获取存储过程的参数信息

摘要:好多人都喜欢写一些代码生成器的东西,毕竟谁也不愿意在重复枯燥的事上多费功夫,比如要写一个生成c#处理存储过程的代码吧,就要先获取存储过程的名称,以及存储过程的参数的名称,大小,类型,方向等信息,这样才能根据这些信息拼接出要生成的代码字符串,更高级的代码生成器是利用了.NET的CodeDom技术。获取某个数据库中所有存储过程名称列表可以通过访问sysobjects表来完成,只要获取了存储过程的名字就可以通过下文的技术来获取存储过程更详细的信息。

一、获取某个数据库的存储过程列表
用下面的语句可以很方便的获取某个数据库的存储过程列表

use  northwind  -- 这里是数据库名
select  name  from  sysobjects  where  xtype  =   ' P '   order   by  name

 

二、利用ADO来获取某个存储过程的参数信息
利用ADO获取存储过程参数的类型和方向是用数字表示的,因为在ASP里是用数字来表示ADO类型的,要想获取这些数字和ADO类型表示字符串的对应关系得参照一个字典,而且ADO类型和SQLSERVER类型之间还需要一个对应关系,这之间并不是一一对应的,关于这两个对应关系表,我并没有一份权威的,所以我就不提供了。在asp或者asp.net处理存储过程的时候必须得给存储过程的参数指定类型,所以你得自己想办法把这些数字转换为类似ado里的“adVarBinary”,“adLongVarWChar”或者ado.net里的System.Data.CommandType枚举。其实可以根据adovbs.inc文件很容易的做到这些数字和ado类型字符串的转换,但是你想在这些数字和System.Data.CommandType之间转换可参考的东西就没那么好找了,得你自己凭感觉转换。不过不要紧,我一会儿还会介绍怎么用ADO.NET获取存储过程参数的技术。

<% @LANGUAGE="VBSCRIPT" CODEPAGE="936" %>
<!-- METADATA TYPE="typelib"
FILE="c:\program files\common files\system\ado\msado15.dll"
-->
<%
Dim strConn,connNorthwind,cmdGetSpParameter
Set connNorthwind = Server.CreateObject("ADODB.Connection")
strConn 
= "Provider=sqloledb;" & _
      
"Data Source=127.0.0.1;Initial Catalog=Northwind;User Id=sa;Password=sa; "
connNorthwind.Open strConn
Set cmdGetSpParameter  = Server.CreateObject("ADODB.Command")
Set cmdGetSpParameter.ActiveConnection = connNorthwind
cmdGetSpParameter.CommandText 
= "SalesByCategory"
cmdGetSpParameter.CommandType = adCmdStoredProc
cmdGetSpParameter.CommandTimeout 
= 15
%>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
< html >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=gb2312" >
< title > 获取存储过程参数 </ title >
</ head >
< body >
<%
Dim item
cmdGetSpParameter.Parameters.refresh
For Each item In cmdGetSpParameter.Parameters
Response.Write item.name 
& "||" & item.Type & "||" & item.size &"||" &item.Direction&"<BR>"
Next
%>
</ body >
</ html >


三、利用ADO.NET获取存储过程参数信息
我这里用VB.NET写的哦,大家凑合看吧,我是为了顺应我的ASP的思维,代码很简单,我就不写C#版本了。

<% @ Page Language="VB" ContentType="text/html" ResponseEncoding="gb2312"  %>
<% @ Import Namespace="System.Data.SqlClient"  %>
<% @ Import Namespace="System.Data"  %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
< html >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=gb2312" >
< title > 获取存储过程参数 </ title >
</ head >
< body >
<%
Dim ConnectionStr
ConnectionStr 
= "Data Source=127.0.0.1;Initial Catalog=Northwind;User Id=sa;Password=sa; "
Dim conn As New SqlConnection(ConnectionStr)
Dim objCommand = conn.CreateCommand()
objCommand.CommandText 
= "SalesByCategory"
objCommand.CommandType = CommandType.StoredProcedure
conn.Open()
SqlCommandBuilder.DeriveParameters(objCommand)
Dim item As Data.SqlClient.SqlParameter
For Each item In objCommand.Parameters
 Response.Write(
"<br>" + item.ParameterName() + "||" + item.SqlDbType.ToString() + "||" + item.Direction.ToString())
Next
conn.Close()
%>
</ body >
</ html >

 四、用T-SQL获取存储过程的参数信息
也许有人要问了,能不能纯用t-sql来获取这些信息,答案是肯定的,不过我刚才给忘了,其实我写的WawaCodePro代码生成器就是用下面的方法来获取存储过程信息的

USE  Northwind  -- 这里写数据库
SELECT  a.name  AS  p_name,b.name  AS  p_type,a.length  AS  p_length,a.isoutparam  AS  p_isout  
FROM  syscolumns a, systypes b 
WHERE  a.xtype = b.xtype 
 
AND  b.name <> ' sysname '  
 
AND  id  =  ( select  id  from  sysobjects  where  name  =   ' SalesByCategory ' -- 这里指定存储过程的名字

好像这个也行
sysobjects表可以得到存储过程名,syscolumns表中存着对应存储过程的参数

select  sc.name  as  参数名,st.name  as  类型,sc.length  as  长度
from  syscolumns sc  inner    join   sysobjects so  on  so.id = sc.id 
                   
inner    join  systypes st  on  sc.xtype = st.xtype
where  so.name = ' 存储过程名 '



源自: http://www.cnblogs.com/onlytiancai/archive/2005/08/18/217556.html

转载于:https://www.cnblogs.com/symbol441/archive/2007/11/01/945671.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值