>데이터 베이스 >MySQL 튜토리얼 >C#을 사용하여 매개변수화된 데이터를 SQL Server에 효율적으로 대량 삽입하려면 어떻게 해야 합니까?

C#을 사용하여 매개변수화된 데이터를 SQL Server에 효율적으로 대량 삽입하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-12 07:31:47407검색

How Can I Efficiently Bulk Insert Parameterized Data into SQL Server Using C#?

C#을 사용하여 SQL Server에 대량 데이터 삽입 최적화

대규모 데이터 세트를 처리하려면 효율적인 데이터베이스 삽입 기술이 필요한 경우가 많습니다. 웹 소스 데이터를 처리할 때 매개변수화된 쿼리는 보안과 성능을 위해 매우 중요합니다. 이 문서에서는 일반적이고 비효율적인 행별 접근 방식에 대한 우수한 방법을 보여줍니다.

비효율적인 단일 행 삽입 문제 해결

개별 INSERT 문(예: INSERT INTO DATABASE('web',@data))을 사용한 반복 삽입은 속도가 느리고 SQL 삽입에 취약합니다.

해결책: 테이블 값 매개변수(TVP)

SQL Server 2008 이상 버전에서는 TVP(테이블 값 매개 변수)를 지원하여 보안을 위해 매개 변수화를 유지하면서 대량 삽입을 위한 매우 효율적인 방법을 제공합니다.

1. 사용자 정의 테이블 유형(UDT) 정의

대상 데이터베이스 테이블의 구조를 미러링하는 UDT를 생성하는 것부터 시작하세요.

<code class="language-sql">CREATE TYPE MyTableType AS TABLE
(
    Col1 int,
    Col2 varchar(20)
)
GO</code>

2. TVP를 사용하여 저장 프로시저 만들기

다음으로 TVP를 허용하는 저장 프로시저를 만듭니다.

<code class="language-sql">CREATE PROCEDURE MyProcedure
(
    @MyTable dbo.MyTableType READONLY -- READONLY is crucial for TVPs!
)
AS

INSERT INTO MyTable (Col1, Col2)
SELECT Col1, Col2
FROM @MyTable

GO</code>

3. TVP를 사용한 C# 구현

C# 코드는 DataTable을 활용하여 삽입 전 데이터를 보관합니다.

<code class="language-csharp">DataTable dt = new DataTable();
dt.Columns.Add("Col1", typeof(int));
dt.Columns.Add("Col2", typeof(string));

// Populate the DataTable with your data here

using (var con = new SqlConnection("ConnectionString"))
{
    using (var cmd = new SqlCommand("MyProcedure", con))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@MyTable", dt); // Simplified parameter addition
        con.Open();
        cmd.ExecuteNonQuery();
    }
}</code>

이 접근 방식은 TVP를 활용하여 개별 INSERT 문에 비해 대량 데이터를 훨씬 빠르고 안전하게 삽입할 수 있습니다. AddWithValue을 사용하면 매개변수 처리가 단순화됩니다. "ConnectionString"을 실제 연결 문자열로 바꿔야 합니다.

위 내용은 C#을 사용하여 매개변수화된 데이터를 SQL Server에 효율적으로 대량 삽입하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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