当前位置:编程学习 > C#/ASP.NET >>

按鍵觸發生成XML文件的事件

各位高手请帮帮忙……

        string sql = "SELECT BedNo,BarCode FROM dbo.tbl_bed FOR XML AUTO,XMLDATA";

        SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=db_Wellmeadowshospital;Integrated Security=True");

        conn.Open();

        SqlCommand cmd = new SqlCommand(sql, conn);

        XmlTextReader objXmlReader = (XmlTextReader)cmd.ExecuteXmlReader();

        DataSet ds = new DataSet();

        ds.DataSetName = "XML";

        ds.ReadXml(objXmlReader, XmlReadMode.Fragment);

        ds.WriteXml(Server.MapPath("albert.xml"));

        conn.Close();

我利用以上代码想实现从数据库提取所需数据生成所要的XML文件,但当我运行时,

XmlTextReader objXmlReader = (XmlTextReader)cmd.ExecuteXmlReader();

这句利用TextReader的语句总是出错……(用的是VS2008).

Error: InvalidCastException was unhandled by user code:

XmlTextReader objXmlReader 

補充,XmlTextReader 是不能直接強制轉換成 XmlReader。但問題是即使我都改成XmlReader來讀取DataSet的數據時,還是生成不了制定的XML文檔。
感覺好像DataSet就沒裝入數據。 --------------------编程问答-------------------- 给你个我以前写的例子参考下


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Xml;
namespace XMLReadAndStore
{
    public partial class Form1 : Form
    {
        private static readonly string FileName = "DomainSystem.xml";

        DataSet set = new DataSet();
    
        public Form1()
        {
            
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DataGridViewBind();
        }
        private void DataGridViewBind()
        {
            try
            {
                DataTable table = new DataTable("item");
                table.Columns.AddRange(new DataColumn[] 
                        {
                            new DataColumn("id"),
                            new DataColumn("DomainName"),
                            new DataColumn("DomainDescribe"),
                            new DataColumn("DomainRegDate"),
                            new DataColumn("DomainDeadDate")
                        });
                table.Columns["id"].DataType = typeof(Int32);
                table.ReadXml(FileName);   //读取xml文件
                set.Tables.Add(table);
                dataGridView1.DataSource = set.Tables[0];//设置dataGridView的数据源
            }
            catch (IndexOutOfRangeException)
            {
                MessageBox.Show("Cannot find table 0 .");
            }
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            DataTable table = set.Tables[0];

            DataRow[] rows = table.Select(@"DomainName = '" + this.txtName.Text.Replace("'", "''") + "'");

            rows = table.Select(@"id = max(id)");
            int x = Convert.ToInt32(rows[0]["id"].ToString());
            DataRow row = table.NewRow();
            row["id"] = x + 1;
            row["DomainName"] = txtName.Text;
            row["DomainDescribe"] = txtDescribe.Text;
            row["DomainRegDate"] = dateTimePicker1.Value;
            row["DomainDeadDate"] = dateTimePicker2.Value;
            table.Rows.Add(row);
            set.WriteXml(FileName);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            
        }

        private void btnDel_Click(object sender, EventArgs e)   
        {
            //foreach (DataGridViewRow row in dataGridView1.SelectedRows)     // 与下面的功能相同
            //{
            //    dataGridView1.Rows.Remove(row);
            //    set.WriteXml(FileName);
            //}

            for (int i = 0; i < this.dataGridView1.SelectedRows.Count; i++)
            {
                this.dataGridView1.Rows.RemoveAt(this.dataGridView1.CurrentRow.Index);
                set.WriteXml(FileName);
            }
        }
    }
}
--------------------编程问答-------------------- better than others' anyway!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,