这不重复。
@Fubo answer使用忽略“参数”的字符串构建器 功能。这是一种有效的方法,但我想知道是否 类似的方法可以与参数功能一起使用。
使用交易(另一种解决方案)似乎同样缓慢。
我正在尝试将200万行加载到表中。这段代码完成了这项工作,但需要30多分钟。
如何让它更快?
我想过可能在内存中创建一个巨大的多重插入语句,然后只调用一次ExecuteNonQuery - 但我不知道该怎么做,因为我使用的是“参数”功能。
NpgsqlConnection conn = new NpgsqlConnection(connstring);
conn.Open();
NpgsqlCommand cmd = new NpgsqlCommand("insert into \"Min_Bar_Price_Data\" values(:SEC_ID, :PX_OPEN, :PX_HIGH, :PX_LOW, :PX_LAST, :PX_VOLUME, :Date)", conn);
cmd.Parameters.Add(new NpgsqlParameter("SEC_ID", DbType.Int32));
cmd.Parameters.Add(new NpgsqlParameter("PX_OPEN", DbType.Double));
cmd.Parameters.Add(new NpgsqlParameter("PX_HIGH", DbType.Double));
cmd.Parameters.Add(new NpgsqlParameter("PX_LOW", DbType.Double));
cmd.Parameters.Add(new NpgsqlParameter("PX_LAST", DbType.Double));
cmd.Parameters.Add(new NpgsqlParameter("PX_VOLUME", DbType.Double));
cmd.Parameters.Add(new NpgsqlParameter("Date", DbType.DateTime));
int ID = 0;
foreach (var d in SortedData)
{
cmd.Parameters["SEC_ID"].Value = sec_ID;
cmd.Parameters["PX_OPEN"].Value = 0.0;
cmd.Parameters["PX_HIGH"].Value = 0.0;
cmd.Parameters["PX_LOW"].Value = 0.0;
cmd.Parameters["PX_LAST"].Value = d.Close;
cmd.Parameters["PX_VOLUME"].Value = 1.0;
cmd.Parameters["Date"].Value = d.DT;
try
{
cmd.ExecuteNonQuery();
}
catch (Exception er)
{
Console.WriteLine("ER: " + er.Message);
}
}