programing

Dapper를 사용하여 C# List를 데이터베이스에 삽입하는 방법그물

skycolor 2023. 5. 2. 22:31
반응형

Dapper를 사용하여 C# List를 데이터베이스에 삽입하는 방법그물

를 사용하여 다음을 삽입하려면 어떻게 해야 합니까?C# List데이터베이스에 저장합니다.이전에는 Dapper 없이 List values를 데이터베이스삽입하기 위해 아래 코드를 사용했습니다.

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쿼리에 연결되었지만 루프 상태로 고착되었습니다. 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에서는 SQL 매개 변수와 동일한 AKA 속성 또는 필드 이름과 일치합니다.그래서, 당신이 가지고 있었다고 가정하면,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

대퍼를 사용합니다.투고 https://dapper-tutorial.net/insert#example---insert-single ! 쉽게 오브젝트 목록을 DB에 삽입할 수 있습니다.

언급URL : https://stackoverflow.com/questions/17150542/how-to-insert-a-c-sharp-list-to-database-using-dapper-net

반응형