>백엔드 개발 >C++ >.NET/C#을 사용하여 Access 데이터베이스에 빠르게 대량 삽입하려면 어떻게 해야 합니까?

.NET/C#을 사용하여 Access 데이터베이스에 빠르게 대량 삽입하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-03 22:02:40776검색

How Can I Achieve Fast Bulk Inserts into an Access Database Using .NET/C#?

.NET/C#에서 액세스하기 위해 많은 수의 레코드 쓰기(대량 삽입)

문제: ADO.NET을 사용하여 Access 데이터베이스에 대규모 데이터 세트를 추가하는 것은 시간이 많이 걸립니다.

해결책:

DAO를 사용하면 Access에 대량 삽입 시 ADO.NET에 비해 상당한 속도 이점이 있습니다.

1 . 필드 변수를 사용한 DAO(2.8초):

DAO.Field[] myFields = new DAO.Field[20];
for (int k = 0; k < 20; k++) myFields[k] = rs.Fields["Field" + (k + 1).ToString()];

for (int i = 0; i < 100000; i++)
{
    rs.AddNew();
    for (int k = 0; k < 20; k++)
    {
        myFields[k].Value = i + k;
    }
    rs.Update();
}

2. 컬럼 인덱스를 이용한 DAO (11.0초):

for (int i = 0; i < 100000; i++)
{
    rs.AddNew();
    for (int k = 0; k < 20; k++)
    {
        rs.Fields[k].Value = i + k;
    }
    rs.Update();
}

3. 컬럼명을 이용한 DAO (17.0초):

for (int i = 0; i < 100000; i++)
{
    rs.AddNew();
    for (int k = 0; k < 20; k++)
    {
        rs.Fields["Field" + (k + 1).ToString()].Value = i + k;
    }
    rs.Update();
}

4. INSERT 문을 사용하는 ADO.NET(79.0초):

for (int i = 0; i < 100000; i++)
{
    StringBuilder insertSQL = new StringBuilder("INSERT INTO TEMP (")
        .Append(names)
        .Append(") VALUES (");

    for (int k = 0; k < 19; k++)
    {
        insertSQL.Append(i + k).Append(",");
    }
    insertSQL.Append(i + 19).Append(")");
    cmd.CommandText = insertSQL.ToString();
    cmd.ExecuteNonQuery();
}

5. DataTable 및 DataAdapter를 사용하는 ADO.NET(86.0초):

for (int i = 0; i < 100000; i++)
{
    DataRow dr = dt.NewRow();
    for (int k = 0; k < 20; k++)
    {
        dr["Field" + (k + 1).ToString()] = i + k;
    }
    dt.Rows.Add(dr);
}
da.Update(dt);

6. 자동화 가져오기가 포함된 텍스트 파일(2.8초):

데이터를 텍스트 파일로 내보내고 Access Automation을 사용하여 가져옵니다(대규모 데이터 세트에는 권장되지 않음):

StreamWriter sw = new StreamWriter(Properties.Settings.Default.TEMPPathLocation);

for (int i = 0; i < 100000; i++)
{
    for (int k = 0; k < 19; k++)
    {
        sw.Write(i + k);
        sw.Write(",");
    }
    sw.WriteLine(i + 19);
}
sw.Close();

ACCESS.Application accApplication = new ACCESS.Application();
accApplication.OpenCurrentDatabase(databaseName, false, "");
accApplication.DoCmd.RunSQL("DELETE FROM TEMP");
accApplication.DoCmd.TransferText(TransferType: ACCESS.AcTextTransferType.acImportDelim,
    TableName: "TEMP",
    FileName: Properties.Settings.Default.TEMPPathLocation,
    HasFieldNames: true);
accApplication.CloseCurrentDatabase();
accApplication.Quit();
accApplication = null;

위 내용은 .NET/C#을 사용하여 Access 데이터베이스에 빠르게 대량 삽입하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.