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

总是closedispose流(尝试使用块)。重新启动您的应用服务器(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 回答