복붙노트

[SQL] 어떻게하는 SqlCommand에 설정된 격리 수준에 /도록 SqlConnection은, 트랜잭션 (transaction)로 초기화

SQL

어떻게하는 SqlCommand에 설정된 격리 수준에 /도록 SqlConnection은, 트랜잭션 (transaction)로 초기화

다음 방법은 열려있는 연결에 더러운 읽기를 수행 할 예정이다. 어떤 트랜잭션이 없습니다. 어디에서 격리 수준을 설정합니까?

public string DoDirtyRead(string storedProcName, SqlConnection connection)
{
    using (SqlCommand command = new SqlCommand(storedProcName, connection))
    {
        command.CommandType = CommandType.StoredProcedure;
        // HOW TO SET IsolationLevel to READ_UNCOMMITTED here?
        command.ExecuteNonQuery();
    }
}

해결법

  1. ==============================

    1.들어 BeginTransaction 방법에 : (MSDN 링크)

    들어 BeginTransaction 방법에 : (MSDN 링크)

    그리고 당신은, 테이블 수준에서 SP에서 힌트를 사용 WITH (NOLOCK) 사용하려면 - 당신의 자신의 위험 만 사용합니다.

  2. ==============================

    2.당신이 거래를하지 않으려면, 당신은 당신이 연결을 열 때 한 번 설정할 수 있습니다 당신이 그것을 변경할 때까지 그 설정이 유지됩니다. 그러니 그냥 할 :

    당신이 거래를하지 않으려면, 당신은 당신이 연결을 열 때 한 번 설정할 수 있습니다 당신이 그것을 변경할 때까지 그 설정이 유지됩니다. 그러니 그냥 할 :

    connection.BeginTransaction(IsolationLevel.ReadUncommitted).Commit();
    

    아마 특정 케이스에 가장 적합한을, 당신은 연결을 열고 그것을 사용하고, 그것을 멀리 던져,하지만 난 더 긴 수명 연결 누군가를 위해이 대답을 넣고 싶어하기 때문에.

  3. ==============================

    3.이미 기존 연결 (및 기존 거래)를 가지고 감안할 때, 나는 아이의 격리 수준을 제어 할 수는 TransactionScope를 사용하십시오. 이 더러운 읽기의 행 개수를 (내가 믿는)을 수행합니다

    이미 기존 연결 (및 기존 거래)를 가지고 감안할 때, 나는 아이의 격리 수준을 제어 할 수는 TransactionScope를 사용하십시오. 이 더러운 읽기의 행 개수를 (내가 믿는)을 수행합니다

    using (var command = connection.CreateCommand())
    using(new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions{IsolationLevel = IsolationLevel.ReadUncommitted}))
    {
        command.CommandText = string.Format("select count(*) from {0}", tableName);
        return (int)command.ExecuteScalar();
    }
    
  4. ==============================

    4.당신의 저장 프로 시저에서, TRANSACT-SQL 사용을 위해 :

    당신의 저장 프로 시저에서, TRANSACT-SQL 사용을 위해 :

    SET TRANSACTION ISOLATION LEVEL read uncommitted    -- 0
    SET TRANSACTION ISOLATION LEVEL read committed     -- 1
    SET TRANSACTION ISOLATION LEVEL repeatable read    -- 2
    SET TRANSACTION ISOLATION LEVEL read serializable  -- 3
    
  5. ==============================

    5.당신이 실행할 수있는 저장 프로 시저를 원하는 분리 레벨을 표시하기 위해 귀하의 저장 프로 시저에 다른 매개 변수를 추가합니다.

    당신이 실행할 수있는 저장 프로 시저를 원하는 분리 레벨을 표시하기 위해 귀하의 저장 프로 시저에 다른 매개 변수를 추가합니다.

    @isolevel = 0 IF SET 트랜잭션 격리 수준이 커밋되지 않은 읽기; 그밖에

    또한 나는이 "t의"위탁되어 있지 않은 요구를 믿는다.

  6. from https://stackoverflow.com/questions/4341590/how-to-set-isolation-level-on-sqlcommand-sqlconnection-initialized-with-no-trans by cc-by-sa and MIT license