0
有没有像使用ODP.NET数组绑定功能一样使用npgsql进行批量操作的方法? 我知道单个命令中的Batching/Pipelining /多个SQL语句(在单个往返中执行),但据我所知,不能以相同的方式使用它,并且每个语句的参数都不相同。如果可以完成,我会很高兴如果有人能够提供一个示例如何将下面的代码转换为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一样使用数组(我想这就是odp.net在幕后工作的方式......) – Eve
插入新的行/对象不会意味着你必须使用准备好的INSERT语句 - 任何你可以用(简单)INSERT语句完成的任何事情,你也可以用COPY来完成,除了后者会更有效率。它还可以为您节省处理参数名称的麻烦。阅读我指出的文档是个好主意。 –