1

Xmlからデータを取得しようとしています。私はプログラミングの初心者なので、ご容赦ください。

  protected void Page_Load(object sender, EventArgs e)
  {

    string MyXmlFile= @"E:\\Programming stuff\\Work\\website\\XMLFile.xml";    
     DataSet ds= new DataSet();

    System.IO.FileStream MyReadXml= new System.IO.FileStream(MyXmlFile, System.IO.FileMode.Open);

    ds.ReadXml(MyReadXml);

    DataGrid DataGrid1 = new DataGrid();

    DataGrid1.DataSource = ds;
    DataGrid1.DataBind();
   }

ブラウザで発生するエラーは次のとおりです。

「別のプロセスで使用されているため、プロセスはファイル'E:\ Programming stuff \ Work \ website\XMLFile.xml'にアクセスできません。」

ファイルにアクセスしている他のプロセスを特定するのを手伝ってもらえますか?

編集:コードの変更後:

protected void Page_Load(object sender, EventArgs e)
{
  if(!IsPostBack) 
  {
    string MyXmlFile= Server.MapPath("~/XMLFile.xml");    


   using(System.IO.FileStream MyReadXml= new System.IO.FileStream(MyXmlFile,System.IO.FileMode.Open));
    {
 DataSet ds= new DataSet();
ds.ReadXml(MyReadXml);

DataGrid DataGrid1 = new DataGrid();

DataGrid1.DataSource = ds;
DataGrid1.DataBind();
PlaceHolder1.Controls.Add(DataGrid1);
    }
}
}

エラー:「名前'MyReadXml'は現在のコンテキストに存在しません」

4

2 に答える 2

0

作業完了後は常にストリームを閉じてください

usingブロックにコードを配置すると、コントロールがブロックを離れるとすぐにオブジェクトが破棄されます。

using(System.IO.FileStream MyReadXml= new System.IO.FileStream(MyXmlFile,System.IO.FileMode.Open));
{
    ds.ReadXml(MyReadXml);

    DataGrid DataGrid1 = new DataGrid();

    DataGrid1.DataSource = ds;
    DataGrid1.DataBind();
}
于 2012-12-03T03:19:01.953 に答える
0

常にストリーム(ブロックを使用してみてください)closedisposeappserver(werserver)を再起動して、何が起こるかを確認しますか?

if(!IsPostBack)
{
 string MyXmlFile= @"E:\\Programming stuff\\Work\\website\\XMLFile.xml";    
 using(System.IO.FileStream MyReadXml=System.IO.File.OpenRead(MyXmlFile))
  {
    DataSet ds= new DataSet();
    ds.ReadXml(MyReadXml);
    //Add DataGrid control markup in .aspx.
    DataGrid1.DataSource = ds.Tables[0];
    DataGrid1.DataBind();
  }
 }

注:XMLFile.xmlがのルートの下に配置されている場合は、メソッドをwebsite使用Server.MapPath()して仮想パスから絶対ファイルパスを取得します。

string MyXmlFile= Server.MapPath("~/XMLFile.xml"); 

プログラムでASP.NETサーバーコントロールを追加する場合は、PlaceHolder.aspxファイルにコントロールを追加してPlaceControl1.Controls.Add(DataGrid1)メソッドを呼び出します。

string MyXmlFile= @"E:\\Programming stuff\\Work\\website\\XMLFile.xml";    
     using(System.IO.FileStream MyReadXml=System.IO.File.OpenRead(MyXmlFile))
      {
        DataSet ds= new DataSet();
        ds.ReadXml(MyReadXml);
        DataGrid DataGrid1=new DataGrid();
        DataGrid1.DataSource = ds.Tables[0];
        DataGrid1.DataBind();
        PlaceHolder1.Controls.Add(DataGrid1);
      } 

編集:

「MyReadXmlが存在しません」というエラーが引き続き表示されます。何か問題がありましたか?

usingブロックを終了しました。セミコロンを削除してください。

using(System.IO.FileStream MyReadXml=new   
     System.IO.FileStream(MyXmlFile,System.IO.FileMode.Open))
    {
     ...
    }
于 2012-12-03T03:23:14.427 に答える