>데이터 베이스 >MySQL 튜토리얼 >C# 문자열 목록을 SQL Server 저장 프로시저에 전달하는 방법은 무엇입니까?

C# 문자열 목록을 SQL Server 저장 프로시저에 전달하는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-13 09:22:431001검색

How to Pass a C# String List to a SQL Server Stored Procedure?

C#의 SQL Server 저장 프로시저에 목록 전달

질문:

C# 코드의 문자열 목록을 SQL Server 저장 프로시저에 전달해야 합니다. 그러나 이 목록은 동적이며 수백 개의 항목을 포함합니다.

해결책:

사용자 정의 테이블 유형(UDTT) 사용

SQL Server 2008 이상에서는 UDTT(사용자 정의 테이블 유형)를 제공하므로 저장 프로시저에 사용할 사용자 정의 데이터 유형을 생성할 수 있습니다. 다음 단계를 따르세요.

  1. UDTT 생성: 다음과 유사한 SQL 문을 사용하여 새 UDTT를 생성합니다.
<code class="language-sql">CREATE TYPE [dbo].[StringList] AS TABLE(
    [Item] [NVARCHAR](MAX) NULL
);</code>
  1. 저장 프로시저 수정: UDTT를 매개변수로 수신하도록 저장 프로시저 수정:
<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList]
    @list StringList READONLY
AS
BEGIN
    -- 只返回我们传入的项目
    SELECT l.Item FROM @list l;
END</code>
  1. C#에서 DataTable 채우기: 문자열 목록을 저장할 DataTable 만들기:
<code class="language-csharp">using (var table = new DataTable())
{
    table.Columns.Add("Item", typeof(string));

    for (int i = 0; i < 1000; i++) // 假设列表包含1000个项目
    {
        table.Rows.Add("Item " + i);
    }
}</code>
  1. SqlParameter 생성: UDTT 유형을 사용하여 새 SqlParameter 생성:
<code class="language-csharp">var pList = new SqlParameter("@list", SqlDbType.Structured);
pList.TypeName = "dbo.StringList";
pList.Value = table;</code>
  1. 저장 프로시저 실행: 저장 프로시저 실행 및 결과 검색:
<code class="language-csharp">using (var con = new SqlConnection(connstring))
{
    con.Open();

    using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con))
    {
        cmd.Parameters.Add(pList);

        using (var dr = cmd.ExecuteReader())
        {
            while (dr.Read())
                Console.WriteLine(dr["Item"].ToString());
        }
    }
}</code>

connstring를 자신만의 연결 문자열로 바꾸는 것을 잊지 마세요. 이 코드 예제에서는 목록에 1000개의 항목이 포함되어 있다고 가정하므로 실제 목록 크기에 따라 루프를 조정해야 합니다. 또한 SQL Server 인스턴스가 READONLY 매개변수 사용을 활성화했는지 확인하세요.

위 내용은 C# 문자열 목록을 SQL Server 저장 프로시저에 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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