Я надеялся найти простой способ получить список параметров параметров хранимых процедур. Если процедура имеет 3 параметра, мне нужен список:
  param1 
param2 
param3
Было бы лучше иметь возможность сделать это в коде С#, но SQL тоже хватит. Идеи?
Я надеялся найти простой способ получить список параметров параметров хранимых процедур. Если процедура имеет 3 параметра, мне нужен список:
  param1 
param2 
param3
Было бы лучше иметь возможность сделать это в коде С#, но 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);
// ...
Некоторые ссылки, которые могут помочь:
Вышеупомянутые ссылки относятся к EntLib 3.1. В зависимости от используемой версии .NET Framework вы можете также рассмотреть возможность загрузки правильной версии EntLib для этой ссылки.
Вы можете сделать это, не касаясь SqlConnection, который я считаю бонусом.
Здесь используется пространство имен SqlServer.Management.Smo, поэтому вам нужна ссылка на Microsoft.SqlServer.ConnectionInfo, Microsoft.SqlServer.Management.Sdk и Microsoft.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;
    }
}