2010-12-30 11 views
2

データベース上でストアドプロシージャを実行する必要があります。DbConnectionを使用してストアドプロシージャを実行する

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

は私がされたDbCommandがそれを行うだろうと思われるが、作業は何も見つかっていない:これは私がこれまでに動作する得たものです。 「初期化」という名前のストアドプロシージャを実行する必要があるとします。それ、どうやったら出来るの?

答えて

9

、これはこのようなことができます:私は私のアプリのほとんどで動的問合せをやってる

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

優れています。ありがとうございました。 –

2

コマンドを作成するには、コマンドテキストをSPの名前にして、コマンドタイプをStoredProcedureにする必要があります。 SQLServerのために

+0

実行方法 –

+0

コマンドを実行するのと同じ方法です。 SqlCommand.Execute * – fejesjoco

+0

結果を返さない場合はExecuteNonQuery、結果セットを返す場合はExecuteReader。 –

0

が、あまりにもEFを持っています。私はストアドプロシージャを実行するために_ctx EF DbContextを渡します。私はSQLでこれをすべて行う方法があると確信していますが、私はまだそれを理解していません。

  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(); 
      } 
関連する問題