Question

Je dois exécuter une procédure stockée sur une base de données. Voilà ce que je suis arrivé jusqu'à présent que les travaux:

protected DbProviderFactory dbProviderFactory;
this.dbProviderFactory = DalFactory.GetFactory(this.adapterConfiguration);

DbConnection dbConnection = dbProviderFactory.CreateConnection();

dbConnection.ConnectionString = this.adapterConfiguration.DatabaseInformation.ExternalDatabaseInformation.connectionString;
            try
            {
                dbConnection.Open();
            }
            catch (Exception e)
            {

                throw;
            }

Je soupçonne que DbCommand le ferait, mais n'a pas trouvé de travail de quoi que ce soit. Disons que la procédure stockée par le nom « initialize » doit être exécutée. Comment puis-je faire?

Était-ce utile?

La solution

Pour SqlServer, cela pourrait ressembler à ceci:

DbCommand command = new SqlCommand();
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandText = "<your stored proc>";
command.Connection = dbConnection;

SqlParameter param1 = new SqlParameter("<your parameter>", MyVar);
command.Parameters.Add(param1);
//[...]

SqlParameter returnValue = new SqlParameter("ReturnValue", User);
returnValue.Direction = System.Data.ParameterDirection.ReturnValue;
command.Parameters.Add(returnValue);

command.Connection.Open();
command.ExecuteNonQuery();
int result = (int)command.Parameters["ReturnValue"].Value;
command.Connection.Close();

Autres conseils

Créer une commande, le texte de commande doit être le nom de la SP, et le type de commande doit être StoredProcedure.

Je fais des requêtes dynamiques dans la plupart de mon application, mais ont aussi EF. Je passe un _ctx EF DbContext pour exécuter ma procédure stockée. Je suis sûr qu'il ya un moyen de faire tout cela dans sql, mais je ne l'ai pas encore compris.

            using (_ctx)
            {
                if (_ctx.Database.Connection.State != ConnectionState.Open)
                    _ctx.Database.Connection.Open();
                foreach (var name in _tableNames)
                {
                    using (var cmd = _ctx.Database.Connection.CreateCommand())
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.CommandText = @"UpdateRMRowsToUpload";
                        cmd.Parameters.Add(new SqlParameter("@tableName", SqlDbType.VarChar));
                        cmd.Parameters["@tableName"].Direction = Input;
                        cmd.Parameters["@tableName"].Value = name;
                        cmd.ExecuteNonQuery();
                    }
                }
                if (_ctx.Database.Connection.State == ConnectionState.Open)
                    _ctx.Database.Connection.Close();
            }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top