zoukankan      html  css  js  c++  java
  • <转>以编程方式获取存储过程的参数信息

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

    摘要:好多人都喜欢写一些代码生成器的东西,毕竟谁也不愿意在重复枯燥的事上多费功夫,比如要写一个生成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
  • 相关阅读:
    Synalyze It! Pro v1.11.2
    C# 打开浏览器并 POST 提交信息
    Cocos2d-x iOS Mac环境编译出错 can't locate file for: -lpng -ljpeg -ltiff -lwebp -lfreetype -lwebsockets -lcurl
    Visual Studio 2008用过一段时间后编辑器自动提示(智能提示:Intellisense)功能失效
    iOS根据坐标数据点所在的坐标区域来动态显示到可视范围
    iOS关于百度地图坐标偏移的处理
    WPF画图性能问题
    Xcode Error: The service is invalid (0XE8000022) 解决方法
    引用-定位大量占用CPU的问题
    Semaphore信号量
  • 原文地址:https://www.cnblogs.com/symbol441/p/945671.html
Copyright © 2011-2022 走看看