此问题已多次发布(1,2,3,4),但我找不到适合我案例的问题。< / p>
我有一个结构字典:
public Dictionary<Int32, PhaseMag> Data;
PhaseMag:
public struct PhaseMag
{
public Single Magnitude;
public Single Phase;
}
每个Key值将包含两个2值(Mag。和Phase)。如果您希望看到an image。
我的想法:
那么,我应该采取什么方法呢?我只需要将我的词典保存到DB中,这就是Dic的每一行。将是DB的一行。
答案 0 :(得分:1)
假设您正在使用SQL Server,这是您拥有的众多选项中的两个:
批量插入,建议使用。
public void BulkWrite(Dictionary<Int32, PhaseMag> data)
{
var dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn { DataType = typeof(int), ColumnName = "Key" });
dataTable.Columns.Add(new DataColumn { DataType = typeof(Single), ColumnName = "Magnitude" });
dataTable.Columns.Add(new DataColumn { DataType = typeof(Single), ColumnName = "Phase" });
foreach (var x in data)
{
var r = dataTable.NewRow();
dataTable.Rows.Add(r);
r[0] = x.Key;
r[1] = x.Value.Magnitude;
r[2] = x.Value.Phase;
}
using (var conn = new SqlConnection("conneciton string"))
{
conn.Open();
using (var bulkCopy = new SqlBulkCopy(conn))
{
bulkCopy.BatchSize = 4000;
bulkCopy.DestinationTableName = "YorTableName";
bulkCopy.WriteToServer(dataTable);
}
}
}
多个内联查询,以批处理方式执行。由于您的所有数据都是数字,因此即使使用内联查询,SQL注入的风险也很低。
public void InlineQueryWrite(Dictionary<Int32, PhaseMag> data)
{
using (var conn = new SqlConnection("conneciton string"))
{
conn.Open();
foreach (var bulk in data.Select((d, i) => new {d, i}).GroupBy(x => x.i % 10))
{
var sb = new StringBuilder();
foreach (var x in bulk)
{
sb.AppendFormat("Insert Into Your_Table (Key, Magnitude, Phase) Values ({0},{1},{2});", x.d.Key, x.d.Value.Magnitude, x.d.Value.Phase);
}
using (var command = conn.CreateCommand())
{
command.CommandText = sb.ToString();
command.ExecuteNonQuery();
}
}
}
}
我没有通过代码运行/测试,但它们应该可以工作。