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#相关内容感兴趣的读者可查看本站专题:《C#常见数据库操作技巧汇总》、《C#常见控件用法教程》、《C#窗体操作技巧汇总》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》
希望本文所述对大家C#程序设计有所帮助。
相关文章
- 这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
- 我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
- Create Procedure AtoC @ChangeMoney Money as Set Nocount ON Declare @String1 char(20) Declare @String2 char(30) ...2016-11-25
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
- 存储过程在数据库的应用中我们用到的非常的多了,下面我们来看一篇关于PHP操作MSSQL存储过程修改用户密码的例子,具体的如下所示。 mssql2008 存储过程 下面可以直接...2016-11-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
- 这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25