> 백엔드 개발 > C++ > C#의 배열 매개 변수를 SQLCommand에 전달하는 방법은 무엇입니까?

C#의 배열 매개 변수를 SQLCommand에 전달하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-26 17:41:14
원래의
573명이 탐색했습니다.

How to Pass Array Parameters to a SqlCommand in C#?

C#의 SqlCommand에 배열 매개변수 전달

C#에서 배열 매개변수를 SQL 명령에 전달하려고 할 때 예상대로 작동하지 않는 문제가 발생할 수 있습니다. 근본 원인은 배열을 SqlCommand에 매개 변수로 직접 추가할 수 없기 때문입니다. 이 문제를 해결하려면 배열의 각 값을 개별적으로 추가해야 합니다.

해결책:

  1. 배열 매개변수 정의:

    필수 이름과 데이터 유형을 사용하여 매개변수 배열을 만듭니다.

  2. SqlCommand에 매개변수 추가:

    배열의 각 값에 대해 새 SqlParameter 개체를 추가하고 해당 이름과 값을 지정합니다. 필요한 경우 적절한 SqlDbType 및 크기를 설정합니다.

  3. IN 절 바꾸기:

    CommandText의 "{parameterNameRoot}" 자리 표시자를 쉼표로 구분된 매개변수 이름 목록으로 바꿉니다.

예:

<code class="language-csharp">var parameters = new string[items.Length]; // 此处items应替换为实际的数组变量
var cmd = new SqlCommand();
for (int i = 0; i < items.Length; i++)
{
    cmd.Parameters.AddWithValue("@param" + i, items[i]);
}
cmd.CommandText = cmd.CommandText.Replace("{param}", string.Join(",", Enumerable.Range(0, items.Length).Select(i => "@param" + i)));</code>
로그인 후 복사

개선된 솔루션:

향상되고 재사용 가능한 솔루션을 확장 방법으로 구현할 수 있습니다.

<code class="language-csharp">public static class SqlCommandExt
{
    public static SqlParameter[] AddArrayParameters<T>(this SqlCommand cmd, string paramNameRoot, IEnumerable<T> values, SqlDbType? dbType = null, int? size = null)
    {
        var parameters = new List<SqlParameter>();
        var parameterNames = new List<string>();
        var paramNbr = 1;

        foreach (var value in values)
        {
            var paramName = string.Format("@{0}{1}", paramNameRoot, paramNbr++);
            parameterNames.Add(paramName);
            var p = new SqlParameter(paramName, value);
            if (dbType.HasValue)
                p.SqlDbType = dbType.Value;
            if (size.HasValue)
                p.Size = size.Value;

            cmd.Parameters.Add(p);
            parameters.Add(p);
        }

        cmd.CommandText = cmd.CommandText.Replace("{" + paramNameRoot + "}", string.Join(",", parameterNames));

        return parameters.ToArray();
    }
}</code>
로그인 후 복사

사용법:

<code class="language-csharp">var cmd = new SqlCommand("SELECT * FROM TableA WHERE Age IN ({Age})");
cmd.AddArrayParameters("Age", new int[] { 1, 2, 3 });</code>
로그인 후 복사

이 개선된 예에서는 제네릭을 사용하여 더욱 유연하게 만들고 SqlDbType 및 Size를 지정할 수 있습니다. 또한 CommandText에서 매개변수 이름을 직접 연결하여 발생할 수 있는 잠재적인 보안 위험을 방지합니다. 실제 사용 시 TableAAge를 실제 테이블 및 열 이름으로 바꾸세요.

위 내용은 C#의 배열 매개 변수를 SQLCommand에 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿