使用 Dapper,我如何将一个
C# List
插入到数据库中。之前没有 Dapper ,我使用以下代码将列表值插入到数据库中。try
{
connection.Open();
for (int i = 0; i < processList.Count; i++)
{
string processQuery = "INSERT INTO PROCESS_LOGS VALUES (@Id, @st_Time, @ed_Time, @td_Time)";
command = new SqlCommand(processQuery, connection);
command.Parameters.Add("Id", SqlDbType.Int).Value = processList[i].ID;
command.Parameters.Add("st_Time", SqlDbType.DateTime).Value = processList[i].ST_TIME;
command.Parameters.Add("ed_Time", SqlDbType.DateTime).Value = processList[i].ED_TIME;
command.Parameters.Add("td_Time", SqlDbType.DateTime2).Value = processList[i].TD_TIME;
dataReader.Close();
dataReader = command.ExecuteReader();
}
connection.Close();
}
catch (SqlException ex)
{
//--Handle Exception
}
我熟悉使用dapper获取数据,但这是我第一次尝试使用插入查询。
我尝试了下面的代码,使用Execute
链接到查询,但卡在了循环中。我认为使用dapper工具,没有必要使用循环语句。
connection.Execute(processQuery ... );
编辑:
class ProcessLog
{
public int ID { get; set; }
public DateTime ST_TIME { get; set; }
public DateTime ED_TIME { get; set; }
public DateTime TD_TIME { get; set; }
public string frequency { get; set; }
}
请提供建议。 顺便说一下:我正在使用SQL Server 2008
。
connection.Execute("INSERT INTO PROCESS_LOGS VALUES (@A, @B)", processList);
。 - Marc Gravell(@a1, @b1),(@a2, @b2)
这种格式?我想使用SQL Server的MERGE tble USING VALUES (('a1', 'b1'),('a2','b2')) AS foo(a,b) ON tble.a=foo.a WHEN MATCHED...
语句。如果不行,我宁愿循环执行多条语句,也不想使用临时表,但如果Dapper可以创建我的带括号列表会非常好。我有点怀疑,因为我认为这是特定于供应商的。虽然MySQL使用逗号分隔的括号来进行多行插入操作,所以也许并不是这样?(INS INTO tbl (a,b) VALUES (a1,b1),(a2,b2)
). - ChrislistOfChildren.Select(childId => new { A = parentId, B = childId})
作为参数的LINQ。 - Marc Gravell