2010-02-23 2 views
3

참조으로 사용 중이므로 세션 변수를 사용하는 데 문제가 있으며 으로 사용하고 싶습니다.값으로 변수를 참조로 사용하지 않고

나는이 debuging 내 솔루션에 도착했고 내가 좋아하는 뭔가를 만들어 내 아이디어는 열 스키마와의 "DataTableSchema"단지 DataTable을에 가지고 있었다

DataTable dt = 
    (DataTable)HttpContext.Current.Session[ 
         "SearchReturn-DataTableSchema"]; 

// Adding Rows of Data to DataTable dt 

HttpContext.Current.Session["SearchReturn-DataTable"] = dt; 

((DataTable)HttpContext.Current.Session[ 
    "SearchReturn-DataTableSchema"]).Rows.Clear(); 

return dt; 

" DataTable을"는 열 + 행.

문제는 DataTableSchema에서 모든 행을 취소 할 때, 변수 DT는 행이 (!)

어떻게 이런 일을 방지 할 수 있습니다뿐만 아니라 삭제있을 것이라는 점을입니까? 변수 (이 경우 Session 변수)를 참조가 아닌 값으로 할당하는 방법은 무엇입니까?

감사합니다.


대답

DataTable dt = (DataTable)Session["SearchReturn-DataTableSchema"]; 

요구 사항이있을 수 있습니다 :

DataTable dt = ((DataTable)Session["SearchReturn-DataTableSchema"]).Copy(); 

:-)

답변

3

테이블 복사본을 만들어야합니다.

+0

DataTable.Copy()에 대한 모든 것을 잊어 버렸습니다. – balexandre

2

이의 흥미로운 부분은 행동이 당신의 세션 상태 공급자에 의존하는 것입니다. 참조를 유지하는 현재 in-process 공급자를 사용하고있는 것 같습니다. 그러나 대부분의 공급자 (이해할 수있는 것처럼)는 serialization을 사용합니다.

사람들이 세션에서 직렬화 할 수없는 것이 있음을 알게되면 확장을 시도 할 때 종종 사람을 물게됩니다. 그래서 당신은 다른 공급자로 상태를 밀어 넣는 것을 고려할 것입니다; SQL 서버, memcached 등 - 그들은 모두 데이터를 독립적으로 처리 할 수 ​​있도록 직렬화를 수행합니다.

+0

.NET이 물건을 어떻게 처리 하는지를 아는 것에 대해 좋은 점이 있습니까? BTW : 항상 온라인 상태입니까? 자지 않니? 작업? ;-) – balexandre

+0

내 사용법을 면밀히 살펴보면 근무 시간 (어쩌면 점심을 제외하고)에 * 매우 * 명확하게 정의 된 간격을 볼 수 있습니다. 단지 그것에 관해 "말을했습니다"라고 말하지만, 초과 등급입니다 ... –

0

또한 복제 방법을 사용하여 DataTable 스키마를 복제 할 수 있습니다. 그리고 Load 및 CreateReader 메서드를 통해 데이터를로드하십시오.