DBConnectionを使用してストアドプロシージャを実行します
-
14-10-2019 - |
質問
データベースでストアドプロシージャを実行する必要があります。これは私がこれまでに得たものです。
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はそれを行うと思われますが、何も機能していませんでした。 「初期化」という名前のストアドプロシージャを実行する必要があるとしましょう。それ、どうやったら出来るの?
解決
SQLServerの場合、これは次のようなものかもしれません。
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();
他のヒント
コマンドを作成し、コマンドテキストはSPの名前である必要があり、コマンドタイプはProcedureを保存する必要があります。
私は私のアプリのほとんどで動的クエリをやっていますが、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();
}
所属していません StackOverflow