반응형
Dapper.NET을 사용하여 데이터베이스에 C # 목록을 삽입하는 방법
dapper 를 사용 C# 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
}
나는 날씬한를 사용하여 데이터를 가져 오는 데 익숙 하지만 이것은 삽입 쿼리를 사용하는 첫-th 시도 입니다.
나는 Exceute
쿼리에 연결을 사용하여 아래 코드를 시도했지만 루핑에 걸렸다. 나는 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
.
조금 다르게해야합니다. Dapper에서는 규칙 AKA 속성 또는 필드 이름이 SQL 매개 변수와 동일합니다. 따라서 다음이 안심 가정합니다 MyObject
.
public class MyObject
{
public int A { get; set; }
public string B { get; set; }
}
그리고 가정하면 processList = List<MyObject>
, 당신은 이것을 받고 싶을 것입니다.
foreach (var item in processList)
{
string processQuery = "INSERT INTO PROCESS_LOGS VALUES (@A, @B)";
connection.Execute(processQuery, item);
}
참고 것을 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 });
}
편집하다 :
Marc Gravell의 의견에 따라 Dapper가 루프를 수행하도록 수도 있습니다.
string processQuery = "INSERT INTO PROCESS_LOGS VALUES (@A, @B)";
connection.Execute(processQuery, processList);
대량 삽입이 목록을 반복하고 하나씩 삽입하는 것보다 낫다고 생각합니다.
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();
반응형
'ProgramingTip' 카테고리의 다른 글
코드 숨김에서 명령 호출 (0) | 2020.11.30 |
---|---|
json 파일의 값을 업데이트하고 node.js를 통해 저장하는 방법 (0) | 2020.11.30 |
C ++ 11에서 허용되지 않는 람다를 재정의하는 이유는 무엇입니까? (0) | 2020.11.30 |
밀리 초가있는 epoch 시간을 datetime으로 변환 (0) | 2020.11.30 |
두 목록에 연산자를 적용하는 C # 관용적 방법은 무엇입니까? (0) | 2020.11.30 |