현재 C#을 사용하여 작성된 WinForms 응용 프로그램이 있습니다.C# - 일괄 저장 프로 시저 실행
모든 업데이트는 저장 프로 시저 실행을 통해 수행됩니다. 한 화면에 해당 화면에서 최대 60 개의 업데이트가있는 상황이 있습니다. 현재 각 업데이트 호출은 하나씩 처리되며 클라이언트와 서버 간의 연결 속도가 느린 일부 클라이언트는 속도 문제를 겪고 있습니다. 나는이 모든 호출을 데이터베이스에 즉시 보낼 수 있다면 클라이언트 측에서 많은 대기 시간을 절약 할 수 있다고 확신한다. (현재 60 개의 호출마다 ExecuteNonQuery가 호출되고 클라이언트는 계속하기 전에 참/거짓 결과가 나오고 지연이 발생 함).
이러한 모든 호출을 하나의 SQL 호출로 묶는 가장 좋은 방법은 무엇입니까? 모든 코드를 트랜잭션에 넣을 생각 이었지만 가능한 한 많은 수의 동시 사용자가 시스템을 사용하기 때문에 잠금을 최대한 피할 필요가 있습니다.
EDIT : 저장된 procs의 목적은 글자 그대로 서버의 레코드를 업데이트하는 것입니다. 우리는 실행중인 저장된 procs로부터 어떤 응답도 요구하지 않는다. 본질적으로, 나는 아래 하나의 호출에 그렇게 할 수있는 가장 좋은 방법은
public virtual bool Update(DataRow dataRow, Guid userId)
{
SqlCommand cm = null;
bool ret = true;
try
{
cm = Utilities.GetSqlUpdateCommand(dataRow, userId);
ExecuteNonQuery(cm);
}
catch (SqlException ex)
{
LogDataAccessBaseError(ex);
ret = false;
throw;
}
finally
{
if (cm != null)
{
cm.Dispose();
}
}
return ret;
}
-
(그것은 문이 시작될 때 단지가 기본적으로 트랜잭션이 자동으로 열립니다, 그리고 문이 성공적으로 완료 될 때 최선을 다하고 있습니다 그리고, 사실, SQL의 모든 문은 어쨌든 트랜잭션 내에서 실행) 어떤 종류의 정확성이 필요하면 NO LOCK 쿼리 힌트는 잠금을 피할 수 있습니다. 당신이 돈을 다루고 있다면 나는 그 말을 잊어 버린다. 그러나 웹 페이지가 지난 24 시간 동안받은 조회수와 같은 것을 다루는 경우 2 % 정도 벗어나면 도움이 될 수 있습니다. –