以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 XML 与 数据库 』  (http://bbs.xml.org.cn/list.asp?boardid=17)
----  XML数据更新问题,大家帮忙  (http://bbs.xml.org.cn/dispbbs.asp?boardid=17&rootid=&id=16512)


--  作者:mmlxy
--  发布时间:4/3/2005 5:42:00 AM

--  XML数据更新问题,大家帮忙
我最近在写一个关于xml的程序,读取数据显示在datagrid中没有问题,但时当更新和删除时,就会报错,说文件连接有问题,各位帮帮忙,看看我的程序时什么错误亚!!!


Access to the path "c:\inetpub\wwwroot\try1\sample.xml" is denied.

Source Error:


Line 206:          objdata.Tables("record").Rows.Add(dr)
Line 207:
Line 208:          objdata.WriteXML(Server.mappath("sample.xml"))
Line 209:          LoadXML
Line 210:       Else

我的程序是
<%@ import Namespace="System.Data.OleDb" %>
<%@ import Namespace="System.Data" %>
<%@ Page Language="VB" Debug="true" %>
<HTML>
 <HEAD>
  <script runat="server">

  sub Page_Load(sender as Object, E as EventArgs)
      If NOT IsPostBack Then
        LoadXML
      End if
  End sub


  sub LoadXML
      Dim objdata as New DataSet

      Try
        objdata.ReadXML(Server.Mappath("sample.xml"))
        datagrid1.Datasource=objdata
        datagrid1.Databind()

      Catch

        CreateXML

      End Try
  End sub


  Sub CreateXML
      Dim objdata as New DataSet("root")
      Dim dt as New DataTable("record")
      Dim dr as DataRow

      dt.Columns.Add(New DataColumn("aid"))
      dt.Columns.Add(New DataColumn("name"))
      dt.Columns.Add(New DataColumn("dept"))
      dt.Columns.Add(New DataColumn("salary"))

      dr=dt.NewRow()
      dr(0)="1"
      dr(1)="No Data"
      dr(2)="No Data"
      dr(3)="No Data"

      dt.Rows.Add(dr)

      objdata.Tables.Add(dt)

      datagrid1.datasource=objdata
      datagrid1.databind()

      objdata.WriteXML(Server.mappath("sample.xml"))

      LoadXML()
  End Sub
  
  
  Sub setEditMode(Sender as Object, E as DataGridCommandEventArgs)
  
    Dim objdata as New DataSet
    Dim x1 as string
       
    objdata.ReadXML(Server.Mappath("sample.xml"))

    x1=datagrid1.DataKeys.Item(e.Item.ItemIndex)
     
    objdata.Tables("record").DefaultView.RowFilter="aid='" & x1 & "'"

    If objdata.Tables("record").DefaultView.Count>0 Then
    error4.visible="False"
       datagrid1.EditItemIndex=E.Item.ItemIndex
       datagrid1.showfooter="false"
       LoadXML
 Else
       error4.visible="True"
    End If
End sub


Sub cancelEdit(sender as Object, E as DataGridCommandEventArgs)
    datagrid1.EditItemIndex=-1
    datagrid1.showfooter="true"
    error1.visible="False"
    error2.visible="False"
    error3.visible="False"
    error4.visible="False"
    error5.visible="False"
        
    LoadXML

End sub


Sub DelXML(S as Object, E as DataGridCommandEventArgs)
   If e.CommandName="Delete" Then
     If datagrid1.EditItemIndex=-1 Then
       error5.visible="False"
       Dim x1 as string

       x1=datagrid1.DataKeys.Item(e.Item.ItemIndex)

       Dim objdata as New DataSet
       Try
         objdata.ReadXML(Server.Mappath("sample.xml"))
         objdata.Tables("record").DefaultView.RowFilter="aid='" & x1 & "'"
         If objdata.Tables("record").DefaultView.Count>0 Then
            objdata.Tables("record").DefaultView.Delete(0)
         End If

         objdata.Tables("record").DefaultView.RowFilter=""

         objdata.WriteXML(Server.mappath("sample.xml"))
       Catch
         CreateXML
       End Try

       LoadXML
     Else
       error5.visible="True"
     End If
   End if
End Sub


Sub UpdateXML(s as Object, e as DataGridCommandEventArgs)
   If e.CommandName="Update"  Then
     Dim str1, str2, str3,v1 as string
     Dim txt1,txt2,txt3 as Textbox
     Dim objdata as New DataSet
     Dim x1 as string
       
     objdata.ReadXML(Server.Mappath("sample.xml"))

     v1=e.Item.ItemIndex

     x1=datagrid1.DataKeys.Item(e.Item.ItemIndex)
     
     objdata.Tables("record").DefaultView.RowFilter="aid='" & x1 & "'"

     If objdata.Tables("record").DefaultView.Count>0 Then
       error3.visible="False" 

       txt1=e.Item.FindControl("name_edit")
       txt2=e.Item.FindControl("dept_edit")
       txt3=e.Item.FindControl("sal_edit")
  
       objdata.Tables("record").Rows(v1).Item("name")=txt1.Text
       objdata.Tables("record").Rows(v1).Item("dept")=txt2.Text
       objdata.Tables("record").Rows(v1).Item("salary")=txt3.Text
       datagrid1.datasource=objdata
       datagrid1.databind()

       objdata.WriteXML(Server.mappath("sample.xml"))

       datagrid1.EditItemIndex=-1
       LoadXML
       datagrid1.showfooter="true"
     Else
       error3.visible="True"
     End If
   End If
End sub


Sub doInsert(s as Object, E as DataGridCommandEventArgs)

   if e.CommandName="doAdd" Then
      Dim v1 as string
      Dim tadd1,tadd2,tadd3,tadd4 as Textbox
      Dim objdata as New DataSet
      Dim dr as DataRow

      objdata.ReadXML(Server.Mappath("sample.xml"))

      tadd1=e.Item.FindControl("aid_add")
      tadd2=e.Item.FindControl("name_add")
      tadd3=e.Item.FindControl("dept_add")
      tadd4=e.Item.FindControl("sal_add")

     Try
       tadd1.text=int32.parse(tadd1.text)
       error2.visible="false"

        If tadd1.text<1 Then 
           tadd1.Text=""
           error2.visible="true" 
       End If 
     Catch
        tadd1.text=""
        error2.visible="true"
     End Try

     If tadd1.Text<>"" and tadd2.Text<>"" and tadd3.Text<>"" and tadd4.Text<>"" Then
       objdata.Tables("record").DefaultView.RowFilter="aid='" & tadd1.Text & "'"
       If objdata.Tables("record").DefaultView.Count<=0 Then
          error1.visible="False"
          objdata.Tables("record").DefaultView.RowFilter=""
          dr=objdata.Tables("record").NewRow()

          dr(0)=tadd1.Text
          dr(1)=tadd2.Text
          dr(2)=tadd3.Text
          dr(3)=tadd4.Text
          objdata.Tables("record").Rows.Add(dr)

          objdata.WriteXML(Server.mappath("sample.xml"))
          LoadXML
       Else
          error1.visible="True"
          error1.Text="Id must be unique"
       End If
     End If
   End If
End Sub


Private lastVarValue as Integer
Function showval(a as integer)
   lastVarValue = a
   Return a
End Function

  </script>
 </HEAD>
 <body>
  <form runat="server">
   <FONT face="宋体"></FONT>
   <br>
   <center>
    <h2>Working with XML in a Datagrid
    </h2>
   </center>
   <center>
   </center>
   <center>
    <asp:datagrid id="datagrid1" runat="server" Font-Size="8pt" Font-Name="verdana" Cellpadding="3" onUpdateCommand="UpdateXML" OnCancelCommand="cancelEdit" onEditCommand="setEditMode" AutoGenerateColumns="False" onDeleteCommand="delXML" ShowFooter="True" DataKeyField="aid" onItemCommand="doInsert" BorderWidth="1px" BorderColor="#DEBA84" BackColor="#DEBA84" Font-Names="verdana" BorderStyle="None" CellSpacing="2">
     <FooterStyle forecolor="#8C4510" backcolor="#F7DFB5"></FooterStyle>
     <HeaderStyle font-size="8pt" font-names="Arial" font-bold="True" horizontalalign="Center" forecolor="White" backcolor="#A55129"></HeaderStyle>
     <PagerStyle horizontalalign="Center" forecolor="#8C4510" mode="NumericPages"></PagerStyle>
     <SelectedItemStyle font-bold="True" forecolor="White" backcolor="#738A9C"></SelectedItemStyle>
     <ItemStyle forecolor="#8C4510" backcolor="#FFF7E7"></ItemStyle>
     <Columns>
      <asp:TemplateColumn HeaderText="Id">
       <ItemTemplate>
        <%# showval(DataBinder.Eval(Container.DataItem,"aid")) %>
       </ItemTemplate>
       <FooterTemplate>
        <asp:Textbox runat="server" id="aid_add" Text='<%# int32.parse(lastVarValue)+1 %>' Columns="2" />
       </FooterTemplate>
       <EditItemTemplate>
        <%# DataBinder.Eval(Container.DataItem,"aid") %>
       </EditItemTemplate>
      </asp:TemplateColumn>
      <asp:TemplateColumn HeaderText="Name">
       <ItemTemplate>
        <%# DataBinder.Eval(Container.DataItem,"name") %>
       </ItemTemplate>
       <FooterTemplate>
        <asp:TextBox id="name_add" runat="server" Columns="20" />
       </FooterTemplate>
       <EditItemTemplate>
        <asp:Textbox runat="server" Columns="20" id="name_edit" Text='<%# DataBinder.Eval(Container.DataItem,"name") %>' />
       </EditItemTemplate>
      </asp:TemplateColumn>
      <asp:TemplateColumn HeaderText="Department">
       <ItemTemplate>
        <%# DataBinder.Eval(Container.DataItem,"dept") %>
       </ItemTemplate>
       <FooterTemplate>
        <asp:TextBox id="dept_add" runat="server" Columns="10" />
       </FooterTemplate>
       <EditItemTemplate>
        <asp:Textbox runat="server" Columns="15" id="dept_edit" Text='<%# DataBinder.Eval(Container.DataItem,"dept") %>' />
       </EditItemTemplate>
      </asp:TemplateColumn>
      <asp:TemplateColumn HeaderText="Salary">
       <ItemTemplate>
        <%# DataBinder.Eval(Container.DataItem,"salary") %>
       </ItemTemplate>
       <FooterTemplate>
        <asp:TextBox id="sal_add" runat="server" Columns="10" />
       </FooterTemplate>
       <EditItemTemplate>
        <asp:Textbox runat="server" Columns="15" id="sal_edit" Text='<%# DataBinder.Eval(Container.DataItem,"salary") %>' />
       </EditItemTemplate>
      </asp:TemplateColumn>
      <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Update" CancelText="Cancel" EditText="Edit" HeaderText="Edit"></asp:EditCommandColumn>
      <asp:TemplateColumn HeaderText="Delete">
       <ItemTemplate>
        <asp:LinkButton runat="Server" Text="Delete" CommandName="Delete" />
       </ItemTemplate>
       <FooterTemplate>
        <asp:LinkButton Text="Add" Runat="Server" CommandName="doAdd" />
       </FooterTemplate>
      </asp:TemplateColumn>
     </Columns>
    </asp:datagrid>
   </center>
   <center><asp:Label id="error1" runat="server" visible="False" font-names="Tahoma" bordercolor="#FFC080" font-size="Smaller" font-bold="True" forecolor="Red" tooltip="Id must be unique" backcolor="White" width="161px">Error!
            Id must be unique</asp:Label>
   </center>
   <center><asp:Label id="error2" runat="server" visible="False" font-names="Tahoma" bordercolor="#FFC080" font-size="Smaller" font-bold="True" forecolor="Red" tooltip="Id must be numeric within the range of 1 to 99999" backcolor="White" width="402px">Error!
            Id must be numeric within the range of 1 to 9999</asp:Label>
   </center>
   <center><asp:Label id="error3" runat="server" visible="False" font-names="Tahoma" bordercolor="#FFC080" font-size="Smaller" font-bold="True" forecolor="Red" tooltip="The Record you are updating has been deleted by another user!" backcolor="White" width="402px">Error! The Record you are updating has been deleted by another user!</asp:Label>
   </center>
   <center><asp:Label id="error4" runat="server" visible="False" font-names="Tahoma" bordercolor="#FFC080" font-size="Smaller" font-bold="True" forecolor="Red" tooltip="The Record you are trying to Edit has been deleted by another user!" backcolor="White" width="402px">Error! The Record you are trying to Edit has been deleted by another user!</asp:Label>
   </center>
   <center><asp:Label id="error5" runat="server" visible="False" font-names="Tahoma" bordercolor="#FFC080" font-size="Smaller" font-bold="True" forecolor="Red" tooltip="The Record cannot be deleted while in Edit Mode" backcolor="White" width="402px">Error! The Record cannot be deleted while in Edit Mode</asp:Label>
   </center>
  </form>
 </body>
</HTML>


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
93.750ms