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

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 '视图名'

SQL Server 数据库获取架构信息的更多相关文章

  1. 如何用asp.net MVC框架、highChart库从sql server数据库获取数据动态生成柱状图

    如何用asp.net MVC框架.highChart库从sql server数据库获取数据动态生成柱状图?效果大概是这样的,如图: 请问大侠这个这么实现呢?

  2. 通过Visual Studio 2012 比较SQL Server 数据库的架构变更

    一 需求 随着公司业务的发展,数据库实例也逐渐增多,数据库也会越来越多,有时候我们会发现正式生产数据库也测试数据库数据不一致,也有可能是预发布环境下的数据库与其他数据库架构不一致,或者,分布式数据库上 ...

  3. 找到SQL Server数据库历史增长信息

        很多时候,在我们规划SQL Server数据库的空间,或向存储方面要空间时,都需要估算所需申请数据库空间的大小,估计未来最简单的办法就是看过去的趋势,这通常也是最合理的方式.     通常来讲 ...

  4. ASP.NET Core 监听SQL Server数据库的实时信息

    1.开发环境: 开发工具:Visual Studio 2019 数据库:SQL Server2012 开发环境:.Net Core 3.1 2.使用技术: Signalr:实现消息推送 SqlDepe ...

  5. SQL Server 数据库中的异常信息与编号

    SQL Server 数据库中的系统表提供了强大的元数据信息,其中 dbo.sysmessages 表中存储了数据库执行命令过程中的所有消息. SELECT * FROM master.dbo.sys ...

  6. 如何将Sql server数据库中的模型图转化到Word中--并能够查看字段的属性信息

    1. 在Sql server数据库中创建数据库的模型图 -- Database Diagrams 2. 控制面板--管理工具--ODBC数据源链接--创建一个Sql server的数据源链接 3. 打 ...

  7. SQL Server - 数据库初识

      在互联网笔试中,常遇到数据库的问题,遂来简单总结,注意,以 Sql Server 数据库为例. 数据库 数据库系统,Database System,由数据库和数据库管理系统组成. 数据库,Data ...

  8. 《BI那点儿事》SQL Server 2008体系架构

    Microsoft SQL Server是一个提供了联机事务处理.数据仓库.电子商务应用的数据库和数据分析的平台.体系架构是描述系统组成要素和要素之间关系的方式.Microsoft SQL Serve ...

  9. 转载 50种方法优化SQL Server数据库查询

    原文地址 http://www.cnblogs.com/zhycyq/articles/2636748.html 50种方法优化SQL Server数据库查询 查询速度慢的原因很多,常见如下几种: 1 ...

随机推荐

  1. 2018-2019-1 20189218《Linux内核原理与分析》第四周作业

    构造简单的Linux内核 显然用实验楼配好的环境做这个实验太简单了,按照没有困难制造困难也要上的原则,在自己的64位虚拟机上做这个实验. 按照课本(视频)上的步骤一直做下去,到编译生成init时出现了 ...

  2. 如何让VS2012编写的程序在XP下运行

    Win32主程序需要以下设置 第一步:在工程属性General设置 第二步:在C/C++ Code Generation 设置 第三步:SubSystem 和  Minimum Required Ve ...

  3. Java DecimalFormat 用法(数字格式化)

    我们经常要将数字进行格式化,比如取2位小数,这是最常见的.Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子.下面是常用的例子: import java.tex ...

  4. linux内核启动参数解析及添加

    1.环境: ubuntu16.04 Linux jello 4.4.0-89-generic #112-Ubuntu SMP Mon Jul 31 19:38:41 UTC 2017 x86_64 x ...

  5. Codeforces 1091 Good Bye 2018

    占个坑先,希望不要掉的太惨了吧,不要掉到上一次之前的rating upt:flag竟然没到,开心. A - New Year and the Christmas Ornament 好像没什么可说的. ...

  6. 全面理解虚拟DOM,实现虚拟DOM

    1.为什么需要虚拟DOM DOM是很慢的,其元素非常庞大,页面的性能问题鲜有由JS引起的,大部分都是由DOM操作引起的.如果对前端工作进行抽象的话,主要就是维护状态和更新视图:而更新视图和维护状态都需 ...

  7. 生信软件的好帮手-bioconda--转载

    http://mp.weixin.qq.com/s/nK1Kkf9lfZStoX25Y7SzHQ 这篇文章主要适用于Linux平台,当然MacOS也行,不过它有更好安装方法. 此外网上也会许多更好的关 ...

  8. C#在服务端验证客户端证书(Certificate)

    使用https协议进行通讯的时候可以设置双向证书认证,客户端验证服务端证书的方法前面已经介绍过了,现在说一下在服务端验证客户端证书的方案. 这里给出的方案比较简单,只需要在Service端的配置文件中 ...

  9. ORACLE 多表查询优化收集整理

    搞WEB的离不开数据库,在一个层面上,对数据库的熟练程度决定了很多的事情. 本文就大家都纠结的ORACLE多表查询的性能问题给出一系列个优化方法,那这些都是项目中长期用到的,所以很熟,很熟,已经成为习 ...

  10. EsayUI + MVC + ADO.NET(工作单元)

    关联的设计 关联本身不是一个模式,但它在领域建模的过程中非常重要,所以需要在探讨各种模式之前,先讨论一下对象之间的关联该如何设计.我觉得对象的关联的设计可以遵循如下的一些原则: 关联尽量少,对象之间的 ...