网络编程
位置:首页>> 网络编程>> 数据库>> C# Ado.net实现读取SQLServer数据库存储过程列表及参数信息示例

C# Ado.net实现读取SQLServer数据库存储过程列表及参数信息示例

作者:linFen  发布时间:2024-01-12 20:16:06 

标签:C#,Ado.net,SQLServer,存储过程

本文实例讲述了C# Ado.net读取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 '视图名'

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

希望本文所述对大家C#程序设计有所帮助。

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

0
投稿

猜你喜欢

  • 学习爬虫有一段时间了,今天使用Scrapy框架将校花网的图片爬取到本地。Scrapy爬虫框架相对于使用requests库进行网页的爬取,拥有
  • 本文为大家分享了mysql 8.0.15 winx64安装配置方法,供大家参考,具体内容如下1.去官网下载最新版本的适用于window下的6
  • 今天我们来学习,如何使用有趣的自定义标记来布局页面。有的朋友可能有这样的疑问,自己随便定义的标记浏览器怎么能正确的认识呢?这里我们就要用到文
  • 我们用Select的onchange事件时,常会遇到这样一个问题,那就是连续选相同一项时,不触发onchange事件.select的onch
  • 对于软件来说,每一个新版本的推出都应该是一种进步,不可否认,阿里旺旺2008版相较于之前的版本的确是有很多的进步,但进步的同时却也有着比之前
  • 本文实例为大家分享了Vue+Echarts实现简单折线图的具体代码,供大家参考,具体内容如下Vue+Echarts实现一个折线图,打开vue
  • 我在工作的时候,在测试环境下使用的数据库跟生产环境的数据库不一致,当我们的测试环境下的数据库完成测试准备更新到生产环境上的数据库时候,需要准
  • 本文实例讲述了pymssql数据库操作MSSQL2005的方法。分享给大家供大家参考。具体如下:使用的MSSQL2005,通过pymssql
  • 目录互斥机制写流程读流程恢复流程在Hadoop2.X之前,Namenode是HDFS集群中可能发生单点故障的节点,每个HDFS集群只有一个n
  • 提到numpy数组就不得不说到np.hstack()与np.dstack()的问题。这里我们研究一下它们的使用方法。我们先来看 一下np.h
  • 数据可视化是以图形格式呈现数据。它通过以简单易懂的格式汇总和呈现大量数据,帮助人们理解数据的重要性,并有助于清晰有效地传达信息。考虑这个给定
  • 对象Python 中,一切皆对象。每个对象由:标识(identity)、类型(type)、value(值)组成。1. 标识用于唯一标识对象,
  • 手痒痒系列之简单的放大镜写了个放大镜功能,可以设置显示的宽高width,height显示的位置,float ‘left’ 'righ
  • 下文要实现的可视化大屏内容:需要在地图上将我司船舶的轨迹展示出来。听起来很简单,一开始我也是这样想的。通过一些BI工具应该可以轻松实现,比如
  • 这两天项目里出了一个问题,LIMIT使用后报错。 需求是这样的,我有3张表,infor信息表,mconfig物料配置表,maaply物料申请
  • 前言学前端最基本的登录页面肯定要会写,那登录页面里面的密码框的功能设计就需要好好打磨,主要功能有显示密码明文,密码检测信息提示等等,那么本篇
  • 前言JSON类型是MySQL5.7.8中新加入的一种数据类型,并在后续版本尤其是MySQL8.0中得到了大幅增强,现在的JSON类型的功能十
  • Etag是URL的Entity Tag,用于标示URL对象是否改变,区分不同语言和Session等等。具体内部含义是使服务器控制的,就像Co
  • golang用来序列化的模块有很多,我们来介绍3个。json首先登场的是json,这个几乎毋庸置疑。序列化package mainimpor
  • 本文实例讲述了php简单获取复选框值的方法。分享给大家供大家参考,具体如下:html:<form id="form1&quo
手机版 网络编程 asp之家 www.aspxhome.com