Frage

Ich muss eine gespeicherte Prozedur in einer Datenbank ausführen. Das habe ich so weit gekommen, dass ich funktioniert:

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

Ich vermute, dass Dbcommand es tun würde, aber nichts funktioniert. Nehmen wir an, die gespeicherte Prozedur mit dem Namen "Initialize" muss ausgeführt werden. Wie mache ich das?

War es hilfreich?

Lösung

Für SQLServer könnte dies so sein:

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

Andere Tipps

Erstellen Sie einen Befehl, der Befehlstext sollte der Name des SP sein und der Befehlstyp sollte gespeichert werden.

Ich mache in den meisten meiner Apps dynamische Abfragen, habe aber auch EF. Ich bestehe einen _CTX EF dbContext, um meine gespeicherte Prozedur auszuführen. Ich bin sicher, es gibt eine Möglichkeit, dies alles in SQL zu tun, aber ich habe es noch nicht herausgefunden.

            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();
            }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top