通过C#或SQL获取存储过程参数?

我希望find一个简单的方法来获取存储过程参数的参数列表。 如果程序有3个参数,我想要一个这样的列表:

参数1
参数2
参数3

最好能在C#代码中做到这一点,但SQL也足够了。 想法?

select * from information_schema.parameters where specific_name='your_procedure_name' 

对于SQL Server这应该工作。

 private void ListParms() { SqlConnection conn = new SqlConnection("my sql connection string"); SqlCommand cmd = new SqlCommand("proc name", conn); cmd.CommandType = CommandType.StoredProcedure; conn.Open(); SqlCommandBuilder.DeriveParameters(cmd); foreach (SqlParameter p in cmd.Parameters) { Console.WriteLine(p.ParameterName); } } 

如果您熟悉企业库,那么使用数据访问应用程序块有一个允许DiscoverParameters()的好方法。

 DbCommand command = new DbCommand(); command.CommandText = @"myStoredProc"; command.CommandType = CommandType.StoredProcedure; Database database = new SqlDatabase(myConnectionString); database.DiscoverParameters(command); // ... 

一些可能有帮助的链接:

  1. DiscoverParameters方法 ;
  2. Microsoft.Practices.EnterpriseLibrary.Data命名空间 。

上面的链接是指EntLib 3.1。 根据您使用的.NET Framework版本,您也可以考虑在此链接下载正确的EntLib版本。

你可以做到这一点,而不必触摸SqlConnection,我发现这是一个奖金。

这使用SqlServer.Management.Smo命名空间,因此您需要在项目中引用Microsoft.SqlServer.ConnectionInfoMicrosoft.SqlServer.Management.SdkMicrosoft.SqlServer.Smo

然后使用下面的代码:

 Server srv = new Server("serverNameHere"); srv.ConnectionContext.AutoDisconnectMode = AutoDisconnectMode.NoAutoDisconnect; srv.ConnectionContext.LoginSecure = false; //if using username/password srv.ConnectionContext.Login = "username"; srv.ConnectionContext.Password = "password"; srv.ConnectionContext.Connect(); Database db = srv.Databases["databaseNameHere"]; foreach(StoredProcedure sp in db.StoredProcedures) { foreach(var param in sp.Parameters) { string paramName = param.Name; var dataType = param.DataType; object defaultValue = param.DefaultValue; } }