% d 코드가 4815 인 SQLBulkCopy 오류 40197을 사용할 수 없음 (연결이 강제로 닫힘)

asp.net-mvc azure azure-sql-database sqlbulkcopy sql-server

문제

VS 2013 ASP.NET MVC 5 Web Project 및 Separate Azure 호스팅 SQL Server 데이터베이스로 개발.

아래쪽에는 Visual Studio 2013의 모든 오류 정보가 있습니다. 문제점을 좁히고 해결 방법없이 Microsoft 설명 링크를 발견했습니다. 나는 Database First와 Entity Framework 6로 개발 중이다. ASP.NET 4 MVC & Razor. 나는 SQL Azure 데이터베이스에 연결한다 - 나는 Azure 웹 사이트에 대한 로그를 이미 확인했다.

필자는 DataTable에로드 한 다음 SQL 대량 복사를 사용하여 Azure 데이터베이스에 콘텐츠를 덤프하는 텍스트 파일 (APP_DATA에 업로드 됨)을 구분했습니다. 내 파일이 단지 수백 개의 레코드 만 포함하는 한 모든 것은 100 % 괜찮습니다. 하지만 약 20 만 줄의 20MB 파일을 삽입해야합니다. 큰 파일을 시도 할 때 ASP.NET이 대량 복사를 수행하는 시점에 오류가 발생합니다. 배치 크기 등을 설정 한 것에 상관없이 매번 4000 행 표시가 가능합니다. 나는 모든 옵션을 다 써 버렸고, 내 부잣집 말미에 나는 무료 웹에서 Azure 데이터베이스를 비즈니스에 확장하려고 시도하기까지했다. 나는 웹 사이트를 확장하려고 시도했다. 다음은 코드입니다.

public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize,int identity)
{
    try { 

    // Set the timeout.
    System.Diagnostics.Debug.WriteLine("Start SQL Bulk Copy");

    using (SqlBulkCopy sbc = new SqlBulkCopy("Server=tcp:eumtj4loxy.database.windows.net,1433;Database=AscWaterDB;User ID=HIDDEN@HIDDEN;Password=XXXXXXX;Trusted_Connection=False;Encrypt=True;Connection Timeout=900;", SqlBulkCopyOptions.TableLock))
        {
        sbc.DestinationTableName = DestinationTbl;
        sbc.BulkCopyTimeout = 0;

        // Number of records to be processed in one go
        sbc.BatchSize = 1000;

        // Add your column mappings here
        sbc.ColumnMappings.Add("D2001_SPID", "SupplyPointId");
        sbc.ColumnMappings.Add("D2002_ServiceCategory", "D2002_ServiceCategory");
        sbc.ColumnMappings.Add("D2025_NotifyDisconnection/Reconnection", "D2025_NotifyDisconnectionReconnection");
        sbc.ColumnMappings.Add("WaterBatchId", "WaterBatchId");
        sbc.ColumnMappings.Add("D2003_Schedule3", "D2003_Schedule3");
        sbc.ColumnMappings.Add("D2004_ExemptCustomerFlag", "D2004_ExemptCustomerFlag");
        sbc.ColumnMappings.Add("D2005_CustomerClassification", "D2005_CustomerClassification");
        sbc.ColumnMappings.Add("D2006_29e", "D2006_29e");
        sbc.ColumnMappings.Add("D2007_LargeVolAgreement", "D2007_LargeVolAgreement");
        sbc.ColumnMappings.Add("D2008_SICCode", "D2008_SICCode");
        sbc.ColumnMappings.Add("D2011_RateableValue", "D2011_RateableValue");
        sbc.ColumnMappings.Add("D2015_SPIDVacant", "D2015_SPIDVacant");
        sbc.ColumnMappings.Add("D2018_TroughsDrinkingBowls", "D2018_TroughsDrinkingBowls");
        sbc.ColumnMappings.Add("D2019_WaterServicesToCaravans", "D2019_WaterServicesToCaravans");
        sbc.ColumnMappings.Add("D2020_OutsideTaps", "D2020_OutsideTaps");
        sbc.ColumnMappings.Add("D2022_TransitionalArrangements", "D2022_TransitionalArrangements");
        sbc.ColumnMappings.Add("D2024_Unmeasurable", "D2024_Unmeasurable");
        sbc.ColumnMappings.Add("D2014_FarmCroft", "D2014_FarmCroft");

        // Finally write to server
        System.Diagnostics.Debug.WriteLine("Write Bulk Copy to Server " + DateTime.Now.ToString());
        sbc.WriteToServer(dataTable); // Fails here when I upload a 20MB CSV with 190,000 rows
        sbc.Close();
    }

    // Ignore this I don't get to this code unless loading a file thats only got a few records
    WaterBatch obj = GetWaterBatch(identity); // Now we can get the WaterBatch
    obj.StopDateTime = DateTime.Now;
    Edit(obj);
    Save();
    System.Diagnostics.Debug.WriteLine("Finished " + DateTime.Now.ToString());

    }
    catch (Exception ex)
    {
        Exception ex2 = ex;


        while (ex2.InnerException != null)
        {
            ex2 = ex2.InnerException;
        }
        Console.WriteLine(ex.InnerException);
        throw;
    }
}

나의 $ 예외는 밝힌다 :

$exception  {"A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)"}    System.Exception {System.Data.SqlClient.SqlException}

내 InnerException은 Inner, Inner Exception 등의 경우 -2146232060의 Hresult와 -2147467259의 동일한 메시지가있는 경우입니다.

InnerException  {"An existing connection was forcibly closed by the remote host"}   System.Exception {System.ComponentModel.Win32Exception}

업데이트 된 정보 :

Microsoft의 오류 설명은 (아래)입니다. 나는 오류 번호 40197을 얻고있다. 그러면 Microsoft는 % d 코드를 찾는다. 나는 4815가 될 것이다. 질문은 지금 무엇인가, 여기서 4815의 % d로 40197에 들어가기 위해 어디로 갈 수 있는가?

이 링크에서 내 오류에 관한 다음 정보를 얻었습니다. http://msdn.microsoft.com/en-us/library/windowsazure/ff394106.aspx

40197 17 요청 처리 중에 서비스에서 오류가 발생했습니다. 다시 시도하십시오. 오류 코드 % d. 소프트웨어 또는 하드웨어 업그레이드, 하드웨어 오류 또는 기타 장애 조치 문제로 인해 서비스가 중단 된 경우이 오류가 발생합니다. 오류 메시지 40197에 포함 된 오류 코드 (% d)는 발생한 오류 또는 장애 조치의 종류에 대한 추가 정보를 제공합니다. 오류 메시지 40197에 포함 된 오류 코드의 예는 40020, 40143, 40166 및 40540입니다. SQL 데이터베이스 서버에 다시 연결하면 건강한 데이터베이스 사본에 자동으로 연결됩니다. 응용 프로그램에서 오류 40197을 catch하고 문제 해결을 위해 메시지 내에 포함 된 오류 코드 (% d)를 기록한 다음 리소스를 사용할 수 있고 연결이 다시 설정 될 때까지 SQL 데이터베이스에 다시 연결해야합니다.

인기 답변

대량 삽입 중에 정확한 오류가 발생했습니다. 제 경우에는 범람하는 varchar 칼럼이었습니다. 글자 수 제한을 늘리면 문제가 해결되었습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.