aspnet 2.0 페이지 지시문에서 출력 캐시 매개 변수를 사용하는 데 문제가 있습니다. 선택한 이미지의 값을 저장하기 위해 세션 변수를 사용하고 있습니다. 페이지 지시어에서 출력 캐시가 true로 설정되면 데이터 목록의 동적 컨트롤이 작동하지 않는 것 같습니다. 페이지 지시어를 사용하지 않으려면 이미지를 별도로 캐시하는 방법이 있습니까?SQl Server 2005 데이터베이스 호출에서 이미지를 캐시하는 방법은 무엇입니까?
DataList에 코드
"RepeatColumns ="6 "의 cellpadding ="8 "CellSpacing ="8 "눈금 =" "SelectedItemStyle-의 BackColor ="#의 33ff66 모두 "OnSelectedIndexChanged ="dtlImages_SelectedIndexChanged "OnItemCommand ="dtlImages_ItemCommand "> 'RUNAT = "서버">
'ID = "lblDescription"글꼴 - 굵게 = "진정한"글꼴 크기 = "12 픽셀"글꼴 - 이름 = "굴림">
데이터베이스에서 화상을 검색
코드
보호 보이드를 Page_Load (객체 송신자 경우 System.EventArgs E) { 문자열 strImageID = Request.QueryString을 [ "ID"];
string wf4uConnect = System.Configuration.ConfigurationManager.ConnectionStrings["wf4uConnectionString"].ConnectionString;
System.Data.SqlClient.SqlConnection wf4uConn = new System.Data.SqlClient.SqlConnection(wf4uConnect);
System.Data.SqlClient.SqlCommand myCommand = new SqlCommand("Select ImageFile, ImageType from wf4u_ImageThumb Where ImageId =" + strImageID, wf4uConn);
wf4uConn.Open();
SqlDataReader byteReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
while ((byteReader.Read()))
{
Response.BinaryWrite((byte [])byteReader.GetValue(0));
Response.ContentType = (string)byteReader.GetValue(1);
}
wf4uConn.Close();
}
이미지가 웹 페이지에로드 될 때 이미지를 캐시하기 위해 http 컨텍스트 개체를 구현했습니다.
공용 이미지 목록 (문자열 clientName) { HttpContext context = HttpContext.Current;
if((context.Cache["ImageIdList" + clientName] == null))
{
string wf4uConnect = System.Configuration.ConfigurationManager.ConnectionStrings["wf4uConnectionString"].ConnectionString;
System.Data.SqlClient.SqlConnection wf4uConn = new System.Data.SqlClient.SqlConnection(wf4uConnect);
string queryStr = "SELECT ImageId FROM wf4u_imageThumb WHERE ClientName = @ClientName";
SqlCommand ImageIdComm = new System.Data.SqlClient.SqlCommand(queryStr, wf4uConn);
ImageIdComm.Parameters.Add("@ClientName", SqlDbType.VarChar).Value = clientName;
wf4uConn.Open();
SqlDataReader ImageIdReader = ImageIdComm.ExecuteReader();
if (ImageIdReader.Read())
{
_ImageId = ImageIdReader.GetInt32(0);
_ClientName = ImageIdReader.GetString(1);
context.Cache.Insert("ImageIdList" + clientName, this, null, DateTime.Now.AddSeconds(600), TimeSpan.Zero);
}
wf4uConn.Close();
}
else
{
ImageList list = (ImageList)context.Cache["ImageIdList" + clientName];
_ImageId = list.ImageId;
_ClientName = list.ClientName;
}
}
모든 의견을 환영합니다.
당신이 볼Cache
객체를 사용할 수 있습니다
RJ : 문제와 관련된 몇 가지 코드를 게시 할 수 있습니까?아마도 출력 지시어, 데이터리스트, 바인딩 코드 또는 Session 객체에 저장하는 것일까? –
이것이 첫 번째 질문이며 추가 코드를 게시 할 때 약간 분실됩니다. 이 설명 섹션은 600 자로 제한됩니다. 댓글에 게시물을 추가하려면 어떻게합니까? 나는 여기의 도크 인 것 같은 느낌이 든다. 그래서 나는 그 비행기를 가져갈 것이다. – rjsteward
가장 쉬운 방법은 질문을 편집 한 다음 주석의 관련 부분을 인용하는 것입니다. – devstuff