<转>以编程方式获取存储过程的参数信息
2007-11-01 14:02
288 查看
蛙蛙推荐:以编程方式获取存储过程的参数信息
摘要:好多人都喜欢写一些代码生成器的东西,毕竟谁也不愿意在重复枯燥的事上多费功夫,比如要写一个生成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获取存储过程参数的技术。
<!--METADATA TYPE="typelib"
FILE="c:\program files\common files\system\ado\msado15.dll"
-->
%>
<!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>
%>
</body>
</html>
三、利用ADO.NET获取存储过程参数信息
我这里用VB.NET写的哦,大家凑合看吧,我是为了顺应我的ASP的思维,代码很简单,我就不写C#版本了。
<!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>
%>
</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
摘要:好多人都喜欢写一些代码生成器的东西,毕竟谁也不愿意在重复枯燥的事上多费功夫,比如要写一个生成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获取存储过程参数的技术。
<!--METADATA TYPE="typelib"
FILE="c:\program files\common files\system\ado\msado15.dll"
-->
%>
<!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>
%>
</body>
</html>
三、利用ADO.NET获取存储过程参数信息
我这里用VB.NET写的哦,大家凑合看吧,我是为了顺应我的ASP的思维,代码很简单,我就不写C#版本了。
<!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>
%>
</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
相关文章推荐
- 蛙蛙推荐:以编程方式获取存储过程的参数信息
- 通过编程方式获取Kafka中Topic的Metadata信息
- <源码>FTP客户端追加方式上传自定义信息
- <c:forEach>标签里两种方式获取到循环次数
- <转>深入理解 Java 泛型:类型擦除、通配符、运行时参数类型获取
- <码农进阶> 解析sql语句中参数名然后根据发射获取对应参数值
- <转载>Android软件开发之获取通讯录联系人信息
- <android>桌面快捷方式 + 桌面动态图标(展示未读信息条数) + 悬浮窗 + 沉浸式状态栏
- 日常问题记录--JSP页面中通过<s:property value="#parameters.userName[0]>获取URL参数中文时为乱码的解决办法
- <转载>C# .NET 获取网络适配器信息
- JSP中向<include/>标签传递参数方式
- 父类使用<T>泛型 并通过注入方式 获取到实体类型
- http编程系列2:http协议GET方式获取网络图片
- <s:action>传递参数
- Android简易实战教程--第四十七话《使用OKhttp回调方式获取网络信息》
- 以软件开放平台化解数字家庭的<信息孤岛>
- <Python>Problem#1 Python的函数参数传递
- < 笔记 > Java SE - 08 Java SE 网络编程
- <a></a>和<button></button>标签onclick事件嵌套传递参数
- 获取url参数的几种方式