using System.Collections.Generic;
private static Dictionary<string,List<(string, string)>> _tables;
public static void Main()
var data = new string[7][13];
var tableName = "my_table";
var columns = new List<(string name, string type)> (_tables[tableName]);
var sb = new StringBuilder();
sb.Append("INSERT INTO ");
foreach(var column in columns)
sb.Length = sb.Length - 2;
for(var i=0; i<columns.Count; i++)
var p = "@p" + Convert.ToString(i);
var stmt = sb.ToString();
using (var conn = new NpgsqlConnection("conn string"))
using (var cmd = new NpgsqlCommand(stmt, conn))
for (var i=0; i<columns.Count; i++)
var p = "@p" + Convert.ToString(i);
cmd.Parameters.Add(_createPara(p, columns[i].type));
for (var r=0; r<data.Length; r++)
for (var c=0; c<row.Length; c++)
cmd.Parameters[c].TypedValue =
private static NpgsqlParameter _createPara(string paraName, string typeName)
return new NpgsqlParameter<string>(paraName, NpgsqlDbType.Text);
return new NpgsqlParameter<float>(paraName, NpgsqlDbType.Real);
return new NpgsqlParameter<decimal>(paraName, NpgsqlDbType.Numeric);