연결을 열고 데이터를 데이터베이스에 삽입하는 try \ catch 블록이 있습니다.SQL 오류 코드 배열 처리 방법
catch (SqlException ex)
{
string sqlError = null;
for (int i = 0; i < ex.Errors.Count; i++)
{
sqlError += "Error Message " + ex.Errors[i].Message + "\n" + "Stored Procedure " + ex.Errors[i].Procedure + " \n " + "Line Number " + ex.Errors[i].LineNumber;
}
LogTools.WriteLog("Sql Server error " + sqlError);
Variables.InstallStatusDetail = "Database connection failed";
if (!sqlError.Contains("connection to SQL Server"))
{
if (Variables.WriteToDatabase)
{ HostedDataBase.InsertRunStatusIntoInstallStatus('E', sqlError, null); }
}
}
데이터베이스에 연결 및 로깅을 방해하지 않는 sqlexceptions를 데이터베이스에 기록하려고합니다. 문제는 데이터베이스를 찾을 수 없거나 로그인에 적절한 권한이없는 경우 발생합니다. 예외가 발생하고 데이터베이스에 로그하려고하므로 데이터베이스에 기록하려고하는 함수가 호출됩니다. 데이터베이스에 다시 액세스하려고 시도하지만 다시 한 번 동일한 예외가 발생하여 DSN을 찾을 수 없거나 사용자에게 적절한 권한이 없기 때문에 데이터베이스에 쓸 수없는 시도가 반복됩니다.
데이터베이스에 액세스하고 데이터베이스에 쓸 수 없도록하는 SQL 오류를 처리하는 동시에이 루프를 발생시키지 않는 SQL 오류를 작성할 수 있습니까?
막연한 질문에 사과드립니다. 모든 오류 (일부 SQL 오류 포함)를 데이터베이스에 기록하려고합니다. 문제는 프로그램에서 dsn을 찾을 수 없거나 권한이 없기 때문에 예외가 발생한 경우입니다. 코드가 다시 자신을 실행하고 찾을 수 없거나 적절한 사용 권한이없는 대상에 루프 삽입 시도가 발생합니다. 오류를 삽입하기 전에 SQL 연결 오류 (예 : 잘못된 연결 또는 부적절한 사용 권한을 가진 사용자)에 영향을주지 않는 데이터베이스 오류를 확인하는 실용적인 방법이 필요합니다. – Mattaceten
가장 좋은 방법은 연결 시도를 추적하고 루프가 끊어지는 일종의 카운터를 만드는 것입니다. 5 번 실패하면 기회가 없을 것입니다. 따라서 INT를 생성하고 각 연결 시도에서 INT를 증가 시키십시오. –
당신의 예제는 의미가 있지만 CheckError 메서드에서 SQL 오류가 잘못된 연결인지 나쁜 사용 권한인지를 알 수있는 방법이 있습니까? 또는 데이터베이스 액세스를 방해 할 수있는 알 수없는 오류의 전체 목록? 분명히 데이터베이스에 액세스 할 수 없다면 아무 것도 삽입하지 말아야합니다. – Mattaceten