4 Stimmen

Ausführen einer gespeicherten Prozedur mit einer DbConnection

Ich muss eine gespeicherte Prozedur in einer Datenbank ausführen. Dies ist, was ich bisher bekommen habe, die 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 ich habe nichts gefunden, was funktioniert. Nehmen wir an, dass die gespeicherte Prozedur mit dem Namen "initialize" ausgeführt werden muss. Wie kann ich das tun?

15voto

kerrubin Punkte 1556

Für SqlServer könnte dies folgendermaßen aussehen:

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

2voto

fejesjoco Punkte 11539

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

0voto

Stephen Himes Punkte 565

Ich mache dynamische Abfragen in den meisten meiner App, habe aber auch EF. Ich übergebe 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();
            }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X