Pra*_*een 61 c# sql-server dapper
使用dapper,我如何插入C# List数据库.以前没有dapper我使用下面的代码将List值插入数据库.
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
}
Run Code Online (Sandbox Code Playgroud)
我熟悉使用dapper获取数据,但这是我第一次尝试使用插入查询.
我尝试了以下代码,使用Exceute链接查询但坚持循环; 我认为使用dapper工具,不需要循环语句.
connection.Execute(processQuery ... );
Run Code Online (Sandbox Code Playgroud)
编辑:
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; }
}
Run Code Online (Sandbox Code Playgroud)
请就此提出建议. 仅供参考:我正在使用SQL Server 2008.
Han*_*ney 113
你必须做一点不同的事情.在Dapper中,它匹配常规AKA属性或字段名称与SQL参数相同.所以,假设你有一个MyObject:
public class MyObject
{
public int A { get; set; }
public string B { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
假设processList = List<MyObject>,你想要这样做
foreach (var item in processList)
{
string processQuery = "INSERT INTO PROCESS_LOGS VALUES (@A, @B)";
connection.Execute(processQuery, item);
}
Run Code Online (Sandbox Code Playgroud)
请注意,MyObject属性名称A和B与SQL参数名称@A和@B匹配.
如果您不想重命名对象,可以使用匿名类型来执行映射而不是具体类型:
foreach (var item in processList)
{
string processQuery = "INSERT INTO PROCESS_LOGS VALUES (@A, @B)";
connection.Execute(processQuery, new { A = item.A, B = item.B });
}
Run Code Online (Sandbox Code Playgroud)
编辑:
Per Marc Gravell的评论,你也可以让Dapper为你做循环:
string processQuery = "INSERT INTO PROCESS_LOGS VALUES (@A, @B)";
connection.Execute(processQuery, processList);
Run Code Online (Sandbox Code Playgroud)
Tha*_*oce 20
我相信批量插入比迭代列表并逐个插入更好.
SqlTransaction trans = connection.BeginTransaction();
connection.Execute(@"
insert PROCESS_LOGS(Id, st_Time, ed_Time, td_Time)
values(@Id, @st_Time, @ed_Time, @td_Time)", processList, transaction: trans);
trans.Commit();
Run Code Online (Sandbox Code Playgroud)
参考:https://stackoverflow.com/a/12609410/1136277
| 归档时间: |
|
| 查看次数: |
65052 次 |
| 最近记录: |