>백엔드 개발 >C++ >.NET에서 `ExecuteNonQuery`가 '연결 속성이 초기화되지 않음' 오류를 발생시키는 이유는 무엇입니까?

.NET에서 `ExecuteNonQuery`가 '연결 속성이 초기화되지 않음' 오류를 발생시키는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-05 15:54:40751검색

Why Does `ExecuteNonQuery` Throw a

ExecuteNonQuery: 연결 속성이 초기화되지 않았습니다

문제

개발자가 .NET 프로그램을 실행하는 동안 "ExecuteNonQuery: 연결 속성"으로 인해 오류가 발생했습니다. 초기화되지 않았습니다." 메시지가 나타납니다.

코드 샘플

다음 코드 샘플은 문제를 보여줍니다.

using System.Data.SqlClient;

namespace Test
{
    class Program
    {
        static void Main()
        {
            SqlConnection connection = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=syslog2;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ");

            connection.Open();  // Connection is not assigned to the command
            cmd.ExecuteNonQuery();
            connection.Close();
        }
    }
}

솔루션

문제를 해결하려면 SqlCommand의 연결 속성을 할당해야 합니다. 이는 명령 생성 중에 또는 나중에 속성을 설정하여 수행할 수 있습니다.

명령 생성 중 할당

SqlCommand cmd = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ", connection);

나중에 속성 설정

cmd.Connection = connection;

문 사용 권장 사항

SqlConnection과 같이 IDisposable을 구현하는 개체의 경우 using 문을 사용하는 것이 좋습니다. 자동으로 연결을 닫고 모든 예외를 처리합니다.

using (var connection = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=syslog2;Integrated Security=True"))
using (var cmd = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) "))
{
    cmd.Connection = connection;
    // Connection is automatically closed when leaving the using block
}

연결 관리 최적화

성능을 최적화하기 위해 foreach 루프의 각 항목에 대해 새 연결 및 데이터 어댑터를 만들 필요가 없습니다. . ADO.NET은 자동으로 연결을 관리하고 연결 풀링을 사용합니다.

위 내용은 .NET에서 `ExecuteNonQuery`가 '연결 속성이 초기화되지 않음' 오류를 발생시키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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