Exécuter une procédure stockée avec des parameters sans nom

Je me demandais juste s'il existe un moyen d'exécuter une procédure stockée sans nommer les parameters. Cela signifie que C # résout les parameters dans l'ordre dans lequel ils sont déclarés dans la procédure stockée.

public static DataTable GetRelatedResources(ssortingng StoredProcedure, object[] Parameters) { var Results = new DataTable(); try { using (SqlConnection conn = new SqlConnection()) { using (SqlCommand cmd = new SqlCommand(ConfigurationManager.ConnectionSsortingngs["MK3Entities"].ConnectionSsortingng)) { conn.Open(); cmd.Connection = conn; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = StoredProcedure; if (Parameters!= null) { foreach(var Param in Parameters) { // I Want To Do something like this cmd.Parameters.AddWithValue(Param); } } SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(Results); } } } catch (Exception ex) { MMSLogger.Instance.WriteToLog("Exception Executing Stored Procedure:" + ex.Message); } return Results; } 

Exécuter une command à la place, et transmettre les parameters '@ p1', '@ p2' etc:

 cmd.CommandType = CommandType.Text; cmd.CommandText = 'exec ' + StoredProcedure; int i=0; ssortingng comma = ' '; foreach(var Param in Parameters) { var paramName = Ssortingng.Format("@P{0}", i); cmd.CommandText += comma + paramName; cmd.Parameters.AddWithValue(paramName, Param); ++i; comma = ', '; } 

Sachez que AddwithValue est un antipattern de performance énorme. Découvrez comment le code d'access aux données affecte les performances de la database

Selon MSDN :

Le ParameterName est spécifié sous la forme @paramname. Vous devez définir ParameterName avant d'exécuter un SqlCommand qui repose sur des parameters.

Un autre article MSDN pour SqlCommand :

Les parameters Nameless, également appelés ordinaux, ne sont pas pris en charge par le fournisseur de données .NET Framework pour SQL Server.

Donc, la réponse est non, il n'y a aucun moyen d'exécuter une procédure stockée sans nommer les parameters.

Voulez-vous dire quelque chose comme un paramètre dérivé . Cet article MSDN a donné un aperçu:

Les parameters peuvent également être dérivés d'une procédure stockée utilisant la class DbCommandBuilder. Les classs SqlCommandBuilder et OleDbCommandBuilder fournissent une méthode statique, DeriveParameters, qui remplit automatiquement la collection de parameters d'un object de command qui utilise les informations de paramètre d'une procédure stockée. Notez que DeriveParameters écrase toute information de paramètre existante pour la command.

Une autre solution serait d'get le paramètre de la procédure stockée à partir de la database SQL et de les définir dans votre code. Mais cela nécessite une requête supplémentaire. Pour get l'utilisation du paramètre:

 select * from dbo.parameters where specific_name='procedure-name' 

Mais dans tous les cas, vous devez utiliser des noms de parameters.