2012-02-06 7 views
0

私は初心者であり、皆さんが簡単に見つけることをしようとしています。私のようなものを使用しようとしている私のaspxで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(); 
    } 
    } 
    } 
} 

:私は私のASPXからのデータを、次は私のdefault.csコードであることを私のCSとアクセスのページ読み込み時に選択したSQLを実行したいのですが: 例外の詳細:System.InvalidOperationExceptionが:リーダーがクローズされたときに、メタデータを呼び出すには無効な試み

<%= Reader.GetString(1) %> 

が、私は次のエラーを得続けます。

私の使用しているステートメントが終了時に接続を終了していることがわかりましたが、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:はい、データのバインド中にコードを使用する予定がある場合は、コードのその時点では処分する必要はありません。 –

関連する問題