Dapper.NET을 사용하여 데이터베이스에 C # 목록을 삽입하는 방법

c# dapper sql-server

문제

사용하면 데이터베이스에 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
}

나는 dapper를 사용하여 데이터를 가져 오는 것에 익숙하지만 이것은 insert 쿼리를 사용하여 시도한 첫 시도이다.

나는 아래 코드를 사용해 Exceute , 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();

참조 : https://stackoverflow.com/a/12609410/1136277



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow