Pregunta

necesito para ejecutar un procedimiento almacenado en una base de datos. Esto es lo que tengo hasta ahora que las obras:

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;
            }

sospecho que DbCommand lo haría, pero no han encontrado nada de trabajo. Digamos que el procedimiento almacenado con el nombre de "inicialización" tiene que ser ejecutada. ¿Cómo lo hago?

¿Fue útil?

Solución

Para SqlServer, esto podría ser así:

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();

Otros consejos

Crear un comando, el texto del comando debe ser el nombre de la SP, y el tipo de comando debe ser StoredProcedure.

Estoy haciendo consultas dinámicas en la mayor parte de mi aplicación, pero tiene EF también. Me paso un _ctx EF DbContext el funcionamiento de mi procedimiento almacenado. Estoy seguro de que hay una manera de hacerlo todo en SQL, pero no he descubierto todavía.

            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();
            }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top