asp.net中XML文件作为中间件进行数据交换功能的实现(c#,sql2000)
点击次数:31 次 发布日期:2008-11-26 11:27:54 作者:源代码网
|
源代码网推荐 下面这是由关系数据库生成相应XML文件过程。由于XML只是中间件,所以忽略了Schema或者DTD。 源代码网推荐 1 private void Page_Load(object sender, System.EventArgs e) 源代码网推荐 2 { 源代码网推荐 3 // 在此处放置用户代码以初始化页面 源代码网推荐 4 //基本信息定义 源代码网推荐 5 String strTableName="systypes"; 源代码网推荐 6 String strConnection="server=suntears;user id=sa;password=041210;database=webapplication1_db"; 源代码网推荐 7 String strSql="select * from "+strTableName; 源代码网推荐 8 SqlConnection objConn=new SqlConnection(strConnection); 源代码网推荐 9 SqlDataAdapter objAdapter=new SqlDataAdapter(strSql,objConn); 源代码网推荐 10 DataSet objDSet=new DataSet(); 源代码网推荐 11 objAdapter.Fill(objDSet,"temp"); 源代码网推荐 12 XmlTextWriter objXmlWriter; 源代码网推荐 13 String strtemp1=Request.PhysicalApplicationPath; 源代码网推荐 14 String strpath=strtemp1+"qiming.xml"; 源代码网推荐 15 //初始化XmlWriter.用此类写XML文件 源代码网推荐 16 objXmlWriter=new XmlTextWriter(strpath,null); 源代码网推荐 17 //创建开头的XML声明 源代码网推荐 18 objXmlWriter.WriteStartDocument(); 源代码网推荐 19 //创建根元素xml1 源代码网推荐 20 objXmlWriter.WriteStartElement("xml1"); 源代码网推荐 21 //表名为元素名,字段名为属性,表中的记录为属性的值 源代码网推荐 22 for(int i=0;i<objDSet.Tables["temp"].Rows.Count;i++) 源代码网推荐 23 { 源代码网推荐 24 objXmlWriter.WriteStartElement("menu"); 源代码网推荐 25 for(int j=0;j<objDSet.Tables["temp"].Columns.Count;j++) 源代码网推荐 26 { 源代码网推荐 27 //写入属性 源代码网推荐 28 objXmlWriter.WriteAttributeString(objDSet.Tables["temp"].Columns[j].ColumnName,objDSet.Tables["temp"].Rows[i][j].ToString()); 源代码网推荐 29 } 源代码网推荐 30 objXmlWriter.WriteEndElement(); 源代码网推荐 31 } 源代码网推荐 32 objXmlWriter.WriteEndElement(); 源代码网推荐 33 objXmlWriter.WriteEndDocument(); 源代码网推荐 34 //用close方法关闭文件,否则文件将被锁定 源代码网推荐 35 objXmlWriter.Close(); 源代码网推荐 36 // 在页面上显示结果 源代码网推荐 37 string strXmlResult; 源代码网推荐 38 StreamReader objSR = File.OpenText(strpath); 源代码网推荐 39 strXmlResult = objSR.ReadToEnd(); 源代码网推荐 40 objSR.Close(); 源代码网推荐 41 Response.Write("<pre>" + Server.HtmlEncode(strXmlResult) + "<pre>"); 源代码网推荐 42 } 源代码网推荐 下面是通过上面程序生成的XML文件生成关系数据库的代码 源代码网推荐 源代码网推荐 1 private void Page_Load(object sender, System.EventArgs e) 源代码网推荐 2 { 源代码网推荐 3 // 在此处放置用户代码以初始化页面 源代码网推荐 4 //基本信息定义 源代码网推荐 5 int cx=1; 源代码网推荐 6 string strConn="server=suntears;user id=sa;password=;database=xml_example"; 源代码网推荐 7 string strappstr=Request.PhysicalApplicationPath; 源代码网推荐 8 string strpath=strappstr+"qiming.xml"; 源代码网推荐 9 string strtablename="xml1"; 源代码网推荐 10 string strCreatetable="create table "+strtablename+"("; 源代码网推荐 11 XmlTextReader objXmlReader=new XmlTextReader(strpath); 源代码网推荐 12 SqlConnection objConn=new SqlConnection(strConn); 源代码网推荐 13 SqlCommand objCommand; 源代码网推荐 14 SqlDataAdapter objAdapter; 源代码网推荐 15 DataSet objDSet=new DataSet(); 源代码网推荐 16 DataRow objrow; 源代码网推荐 17 XmlNodeType objNodeType; 源代码网推荐 18 //采用XmlReader类进行XML文件访问操作 源代码网推荐 19 //XmlReader采用拉(pull)模式。因此通过Read()方法迭代各个节点 源代码网推荐 20 while(objXmlReader.Read()) 源代码网推荐 21 { 源代码网推荐 22 objNodeType=objXmlReader.NodeType; 源代码网推荐 23 //根据节点类型进行不同操作 源代码网推荐 24 switch(objNodeType) 源代码网推荐 25 { 源代码网推荐 26 //XML文件开头的声明 源代码网推荐 27 case XmlNodeType.XmlDeclaration: 源代码网推荐 28 Response.Write("11111"+objXmlReader.Name+"<br>"); 源代码网推荐 29 break; 源代码网推荐 30 //正常节点类型 源代码网推荐 31 case XmlNodeType.Element: 源代码网推荐 32 //根据属性个数判断是否是根元素 源代码网推荐 33 if(objXmlReader.AttributeCount>0) 源代码网推荐 34 { 源代码网推荐 35 //cx作为标志位。第一次访问非根元素节点时根据元素结构生成数据库 源代码网推荐 36 if(cx==1) 源代码网推荐 37 { 源代码网推荐 38 while(objXmlReader.MoveToNextAttribute()) 源代码网推荐 39 { 源代码网推荐 40 strCreatetable=strCreatetable+objXmlReader.Name+" varchar(50), "; 源代码网推荐 41 } 源代码网推荐 42 strCreatetable=strCreatetable+")"; 源代码网推荐 43 objCommand=new SqlCommand(strCreatetable,objConn); 源代码网推荐 44 objConn.Open(); 源代码网推荐 45 objCommand.ExecuteNonQuery(); 源代码网推荐 46 objConn.Close(); 源代码网推荐 47 objAdapter=new SqlDataAdapter("select * from "+strtablename,objConn); 源代码网推荐 48 objAdapter.Fill(objDSet,strtablename); 源代码网推荐 49 objXmlReader.MoveToFirstAttribute(); 源代码网推荐 50 //更改标志为cx数值 源代码网推荐 51 cx=0; 源代码网推荐 52 } 源代码网推荐 53 //将XML文件中数据转存到DataSet对象中 源代码网推荐 54 objrow=objDSet.Tables[strtablename].NewRow(); 源代码网推荐 55 objXmlReader.MoveToFirstAttribute(); 源代码网推荐 56 for(int j=0;j<objXmlReader.AttributeCount;j++) 源代码网推荐 57 { 源代码网推荐 58 objrow[j]=objXmlReader.Value.ToString(); 源代码网推荐 59 objXmlReader.MoveToNextAttribute(); 源代码网推荐 60 } 源代码网推荐 61 objDSet.Tables[strtablename].Rows.Add(objrow); 源代码网推荐 62 } 源代码网推荐 63 break; 源代码网推荐 64 } 源代码网推荐 65 } 源代码网推荐 66 //显示转存后的数据表 源代码网推荐 67 DataGrid1.DataSource=objDSet.Tables[strtablename]; 源代码网推荐 68 DataGrid1.DataBind(); 源代码网推荐 69 }将数据更新到数据库的代码没有编写,自己弄吧^_^ 源代码网推荐 源代码网推荐 http://suntears.cnblogs.com/archive/2006/06/02/416207.html 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
