2012-02-06 2 views
0

저는 초보자이며 모두가 쉽게 찾을 수있는 것을하려고합니다. 내 영문에서SQLDATAREADER 정보를 C# 속성을 사용하여 ASPX에 전달

public partial class _Default : System.Web.UI.Page 
{ 
private SqlDataReader reader = null; 
public SqlDataReader Reader { get { return reader; } set { reader = value; } } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); 
    using (SqlConnection connection = new SqlConnection(connectionString)) { 
    connection.Open(); 

    using (SqlCommand command = new SqlCommand("SELECT * FROM uploads WHERE status IS NULL AND uploader = @uploader", connection)) { 
     command.Parameters.Add(new SqlParameter("uploader", "anonymous")); 

     Reader = command.ExecuteReader(); 
    } 
    } 
    } 
} 

내가 좋아하는 뭔가를 사용하려고 해요 : 저는 SQL 내 CS에서 페이지로드 선택하고 내 ASPX에서 해당 데이터에 액세스 실행하고 싶습니다 다음 내 default.cs 코드 :

<%= Reader.GetString(1) %> 

그러나 나는 다음과 같은 오류가 점점 계속 : 예외 정보 : System.InvalidOperationException : 독자가 닫힐 때 메타 데이터를 호출하는 잘못된 시도.

내 사용 문장이 종료되면 연결을 종료한다는 것을 알고 있지만 ASPX에서 데이터에 액세스 할 수없는 이유가 확실하지 않습니다. 루프 내에서 동일한 GetString (1) 값을 사용하면 관련 데이터를 잘 액세스 할 수 있습니다.

기본적으로 내가 그냥 내 결과 출력에 모든 행을 시도하고 = \

답변

1

"사용 중"블록에서 실제로 페이지를 업데이트해야합니다. 가장 간단한 형태에서는 사용 블록에서 귀하의 페이지에 Literal 컨트롤을 추가하고 업데이트 할 수 있습니다 : 당신이 당신의 마크 업에서 다음 구문을 사용하면

Reader = command.ExecuteReader(); 
... 
Literal1.Text = Reader.GetString(1); 

:

<%= Reader.GetString(1) %> 

컴파일러 것이다 페이지 수명주기의 렌더링 단계에서 실행되는 Response.Write 문을 생성하십시오. 귀하의 경우 연결은 그때까지 처리됩니다.

연결 및 판독기를 활성 상태로 유지하고 페이지의 Dispose 메서드를 재정의하여 처리 할 수 ​​있지만이 방법은 권장하지 않습니다.

0

당신은 SQL 명령과 SQL 연결을 처리해서는 안된다.

Load 이벤트의 키워드를 사용하여을 사용하여 을 제거하십시오. 섹션을 사용하지 않을 때 - 리더가 닫히는 연결이 닫히기 때문입니다. 독자가 닫은 후에는 렌더링이나 데이터 바인딩에 사용할 수 없습니다. 페이지를 렌더링하는 완료에

public partial class _Default : System.Web.UI.Page 
{ 
private SqlDataReader reader = null; 
public SqlDataReader Reader { get { return reader; } set { reader = value; } } 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); 
    SqlConnection connection = new SqlConnection(connectionString); 
    connection.Open(); 

    SqlCommand command = new SqlCommand("SELECT * FROM uploads WHERE status IS NULL AND uploader = @uploader", connection); 
     command.Parameters.Add(new SqlParameter("uploader", "anonymous")); 

     Reader = command.ExecuteReader(); 
    } 
} 

하지만

는 독자, 명령 및 연결을 처리하는 것을 잊지 마세요!

+0

이 경우 '사용'해서는 안되는 이유를 말씀해주십시오. –

+0

-1, 잘못된 조언, SqlConnection을 처리해야합니다. – Joe

+0

@Joe : 예, 데이터를 바인딩하는 동안 코드를 사용하려는 경우에는 코드를 폐기하지 않아도됩니다. –