0
ODP.NET配列バインディング機能のようにnpgsqlで一括操作を行う方法はありますか? バッチ処理/パイプライン処理/複数のSQL文が1つのコマンド(1回の往復で実行)で認識されますが、すべてのステートメントに対して異なるパラメータを使用して同じ方法で使用することはできません。もしそれができれば、誰かが以下のコードをNpgsqlに変換する方法の例を提供できるのであれば、私は満足しています。Npgsqlとの配列バインド
List<dto> listDTO; // list containing up to 1000 dtos
OraCommand = db.GetOracleCommand();
OraCommand.CommandText = "INSERT INTO TABLE (ID, FIELD1, FIELD2) VALUES (:ID, :FIELD1, :FIELD2)";
object[] FIELD1 = new object[listDTO.Count];
object[] FIELD2 = new object[listDTO.Count];
for (int i = 0; i <= listDTO.Count - 1; i++)
{
ID[i] = listDTO.Id;
FIELD1[i] = listDTO.Field1;
FIELD2[i] = listDTO.Field2;
}
OraCommand.ArrayBindCount = listDTO.Count;
OraCommand.Parameters.Add(":ID", OracleDbType.Decimal, ID, System.Data.ParameterDirection.Input);
OraCommand.Parameters.Add(":FIELD1", OracleDbType.Varchar2, 10, FIELD1, System.Data.ParameterDirection.Input);
OraCommand.Parameters.Add(":FIELD2", OracleDbType.Varchar2, 32, FIELD2, System.Data.ParameterDirection.Input);
db.DoSqlPrepareCommand(OraCommand);
編集: これは、私はそれが最高のNpgsqlを使用して行われるべきだと思うかである:
NpgsqlConnection conn = new NpgsqlConnection("connString");
conn.Open();
NpgsqlCommand command = new NpgsqlCommand();
string CommandText = "";
for (int i = 0; i <=5 ; i++)
{
CommandText = CommandText + "INSERT INTO testtbl (id, field1) VALUES (@ID_" + i + " , @FIELD1_" + i + ");";
command.Parameters.Add(new NpgsqlParameter("ID_" + i, i));
command.Parameters.Add(new NpgsqlParameter("FIELD1_" + i, "FIELD1" + i));
}
command.CommandText = CommandText;
command.Connection = conn;
int result = command.ExecuteNonQuery();
ありがとうございました。私は新しい行/オブジェクトを挿入したいので、私は準備されたINSERT文と一緒に行かなければならないと思う。 したがって、odp.netのように配列を使用する代わりに、各ステートメントごとに別々のパラメータ名を作成する必要があります(odp.netが裏で働いていると思います...) – Eve
新しい行/オブジェクトを挿入することはできませんあなたは準備されたINSERTステートメントを使う必要があることを意味します - あなたは(単純な)INSERTステートメントで行うことができます。また、パラメータ名を扱う必要がなくなります。私が指摘した文書を読むことは良い考えです。 –