zoukankan      html  css  js  c++  java
  • 读取SQLServer数据库存储过程列表及参数信息

    得到数据库存储过程列表:

    select * from dbo.sysobjects where OBJECTPROPERTY(id, N'IsProcedure') = 1 order by name

    得到某个存储过程的参数信息:(SQL方法)

    select * from syscolumns where ID in    
      (SELECT id FROM sysobjects as a  
       WHERE OBJECTPROPERTY(id, N'IsProcedure') = 1    
       and id = object_id(N'[dbo].[mystoredprocedurename]'))

    得到某个存储过程的参数信息:(Ado.net方法)

    SqlCommandBuilder.DeriveParameters(mysqlcommand);

    得到数据库所有表:

    select * from dbo.sysobjects where OBJECTPROPERTY(id, N'IsUserTable') = 1 order by name

    得到某个表中的字段信息:

    select c.name as ColumnName, c.colorder as ColumnOrder, c.xtype as DataType, typ.name as  DataTypeName, c.Length, c.isnullable from dbo.syscolumns c inner join dbo.sysobjects t 
    on c.id = t.id 
    inner join dbo.systypes typ on typ.xtype = c.xtype
    where OBJECTPROPERTY(t.id, N'IsUserTable') = 1 
    and t.name='mytable' order by c.colorder;

    C# Ado.net代码示例:

    1. 得到数据库存储过程列表:

    using System.Data.SqlClient;
     
    private void GetStoredProceduresList()
    {
        string sql = "select * from dbo.sysobjects where OBJECTPROPERTY(id, N'IsProcedure') = 1 order by name";
        string connStr = @"Data Source=(local);Initial Catalog=mydatabase; Integrated Security=True; Connection Timeout=1;";
     
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.CommandType = CommandType.Text;
     
        try
        {
            conn.Open();
     
            using (SqlDataReader MyReader = cmd.ExecuteReader())
            {
                while (MyReader.Read())
                {
                    //Get stored procedure name
                    this.listBox1.Items.Add(MyReader[0].ToString());
                }
            }
        }
        finally
        {
            conn.Close();
        }
    }

    2. 得到某个存储过程的参数信息:(Ado.net方法)

     
    using System.Data.SqlClient;
     
    private void GetArguments()
    {
        string connStr = @"Data Source=(local);Initial Catalog=mydatabase; Integrated Security=True; Connection Timeout=1;";
     
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "mystoredprocedurename";
        cmd.CommandType = CommandType.StoredProcedure;
     
        try
        {
            conn.Open();
     
            SqlCommandBuilder.DeriveParameters(cmd);
     
            foreach (SqlParameter var in cmd.Parameters)
            {
                if (cmd.Parameters.IndexOf(var) == 0) continue;//Skip return value
     
                MessageBox.Show((String.Format("Param: {0}{1}Type: {2}{1}Direction: {3}",
                   var.ParameterName,
                   Environment.NewLine,
                   var.SqlDbType.ToString(),
                   var.Direction.ToString())));
            }
        }
        finally
        {
            conn.Close();
        }
     
    }

    3. 列出所有数据库:

    using System;
    using System.Windows.Forms;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
     
    private static string connString = 
                "Persist Security Info=True;timeout=5;Data Source=192.168.1.8;User ID=sa;Password=password";
     
    /// <summary>
    /// 列出所有数据库
    /// </summary>
    /// <returns></returns>
    public string[] GetDatabases()
    {
        return GetList("SELECT name FROM sysdatabases order by name asc");
    }
     
    private string[] GetList(string sql)
    {
        if (String.IsNullOrEmpty(connString)) return null;
     
        string connStr = connString;
     
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.CommandType = CommandType.Text;
     
        try
        {
            conn.Open();
     
            List<string> ret = new List<string>();
     
            using (SqlDataReader MyReader = cmd.ExecuteReader())
            {
                while (MyReader.Read())
                {
                    ret.Add(MyReader[0].ToString());
                }
            }
     
            if (ret.Count > 0) return ret.ToArray();
            return null;
        }
        finally
        {
            conn.Close();
        }
    }
     

    4. 得到Table表格列表:

    private static string connString = 
      "Persist Security Info=True;timeout=5;Data Source=192.168.1.8;Initial Catalog=myDb;User ID=sa;Password=password";
     
    /* select name from sysobjects where xtype='u'  ---
       C = CHECK 约束
       D = 默认值或 DEFAULT 约束
       F = FOREIGN KEY 约束
       L = 日志
       FN = 标量函数
       IF = 内嵌表函数
       P = 存储过程
       PK = PRIMARY KEY 约束(类型是 K)
       RF = 复制筛选存储过程
       S = 系统表
       TF = 表函数
       TR = 触发器
       U = 用户表
       UQ = UNIQUE 约束(类型是 K)
       V = 视图
       X = 扩展存储过程
       */
     
    public string[] GetTableList()
    {
        return GetList("SELECT name FROM sysobjects WHERE xtype='U' AND name   <>   'dtproperties' order by name asc");
    }

    5. 得到View视图列表:

    public string[] GetViewList()
    {
         return GetList("SELECT name FROM sysobjects WHERE xtype='V' AND name   <>   'dtproperties' order by name asc");
    }

    6. 得到Function函数列表:

    public string[] GetFunctionList()
    {
        return GetList("SELECT name FROM sysobjects WHERE xtype='FN' AND name   <>   'dtproperties' order by name asc");
    }

    7. 得到存储过程列表:

    public string[] GetStoredProceduresList()
    {
        return GetList("select * from dbo.sysobjects where OBJECTPROPERTY(id, N'IsProcedure') = 1 order by name asc");
    }

    8. 得到table的索引Index信息:

    public TreeNode[] GetTableIndex(string tableName)
    {
        if (String.IsNullOrEmpty(connString)) return null;
     
        List<TreeNode> nodes = new List<TreeNode>();
     
        string connStr = connString;
     
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = new SqlCommand(String.Format("exec sp_helpindex {0}", tableName), conn);
        cmd.CommandType = CommandType.Text;
     
        try
        {
            conn.Open();
     
            using (SqlDataReader MyReader = cmd.ExecuteReader())
            {
                while (MyReader.Read())
                {
                    TreeNode node = new TreeNode(MyReader[0].ToString(), 2, 2);/*Index name*/
                    node.ToolTipText = String.Format("{0}{1}{2}", MyReader[2].ToString()/*index keys*/, Environment.NewLine,
                        MyReader[1].ToString()/*Description*/);
                    nodes.Add(node);
                }
            }
        }
        finally
        {
            conn.Close();
        }
     
        if(nodes.Count>0) return nodes.ToArray ();
        return null;
    }

    9. 得到Table,View,Function,存储过程的参数,Field信息:

    public string[] GetTableFields(string tableName)
    {
        return GetList(String.Format("select name from syscolumns where id =object_id('{0}')", tableName));
    }

    10. 得到Table各个Field的详细定义:

    public TreeNode[] GetTableFieldsDefinition(string TableName)
    {
        if (String.IsNullOrEmpty(connString)) return null;
     
        string connStr = connString;
     
        List<TreeNode> nodes = new List<TreeNode>();
     
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = new SqlCommand(String.Format("select a.name,b.name,a.length,a.isnullable from syscolumns a,systypes b,sysobjects d where a.xtype=b.xusertype and a.id=d.id and d.xtype='U' and a.id =object_id('{0}')",
                      TableName), conn);
        cmd.CommandType = CommandType.Text;
                  
        try
        {
            conn.Open();
     
            using (SqlDataReader MyReader = cmd.ExecuteReader())
            {
                while (MyReader.Read())
                {
                    TreeNode node = new TreeNode(MyReader[0].ToString(), 2, 2);
                    node.ToolTipText = String.Format("Type: {0}{1}Length: {2}{1}Nullable: {3}", MyReader[1].ToString()/*type*/, Environment.NewLine,
                        MyReader[2].ToString()/*length*/, Convert.ToBoolean(MyReader[3]));
                    nodes.Add(node);
                }
            }
     
            if (nodes.Count > 0) return nodes.ToArray();
            return null;
        }
        finally
        {
            conn.Close();
        }
     
    }

    11. 得到存储过程内容:

    类似“8. 得到table的索引Index信息”,SQL语句为:EXEC Sp_HelpText '存储过程名'

    12. 得到视图View定义:

    类似“8. 得到table的索引Index信息”,SQL语句为:EXEC Sp_HelpText '视图名'

    (以上代码可用于代码生成器,列出数据库的所有信息)

    http://www.cnblogs.com/luluping/archive/2009/07/24/1530528.html

  • 相关阅读:
    Linux 从4.12内核版本开始移除了 tcp_tw_recycle 配置。 tcp_max_tw_buckets TIME-WAIT 稳定值
    https://www.cnblogs.com/wclwcw/p/7515515.html
    Builder 模式
    网络优化之net.ipv4.tcp_tw_recycle和tcp_tw_reuse参数
    13 | 实战:单机如何实现管理百万主机的心跳服务? https://time.geekbang.org/column/article/240656
    V2版的接口在V3版里面都能找到对应接口 数据结构
    。SLI,Service Level Indicator,服务等级指标,其实就是我们选择哪些指标来衡量我们的稳定性。而 SLO,Service Level Objective,服务等级目标,指的就是我们设定的稳定性目标,比如“几个 9”这样的目标。
    【自愈能力集】:基于原子化服务能力封装,目前已实现绕行开关、域名切换、服务隔离等多项服务能力,并在生产中使用。紧密结合故障场景,不断更新自愈能力,通过各个能力的有机组合,能力集已见雏形;
    阿里云弹性公网IP那些事 阿里云云栖号 6月1日 弹性公网IP是独立的公网IP资源,可以绑定到阿里云专有网络VPC类型的ECS、NAT网关、私网负载均衡SLB上,并可以动态解绑,实现公网IP和ECS、NAT网关、SLB的解耦,满足灵活管理的要求。阿里云弹性公网IP那些事 阿里云云栖号 6月1日 弹性络VPC类型的E
    Linux下nf_conntrack(最全面)_董明磊-CSDN博客_nf_conntrack https://blog.csdn.net/qq_35299863/article/details/79530732
  • 原文地址:https://www.cnblogs.com/fuqiang88/p/6080173.html
Copyright © 2011-2022 走看看