web-dev-qa-db-ja.com

C#またはSQLのいずれかでストアドプロシージャのパラメータを取得しますか?

ストアドプロシージャのパラメーターのパラメーターリストを取得する簡単な方法を見つけたいと思っていました。手順に3つのパラメーターがある場合、次のようなリストが必要です。

param1
param2
param

C#コードでこれを実行できることが最善ですが、SQLでも十分です。アイデア?

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

また、この投稿を参照して、より多くのメソッドを知ってください https://exploresql.com/2016/10/14/different-methods-to-get-parameter-list-of-a-stored-procedure/

74
Madhivanan

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);
    }
}
55
Robaticus

SqlConnectionに触れることなくこれを実行できます。これはボーナスです。

これは SqlServer.Management.Smo 名前空間を使用するため、プロジェクトでMicrosoft.SqlServer.ConnectionInfoMicrosoft.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;
    }
}
10
gunr2171

エンタープライズライブラリに精通している場合は、 DiscoverParameters() を使用して Data Access Application Block を使用できる方法があります。

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バージョンをダウンロードすることも検討してください。

9