Sql2005中对XML类型字段的运用
2007-06-02 09:58
330 查看
| ||
正文: 在SQL[/b]2005[/b]中增加了xml[/b]类型数据。这样,我们可以将我们应用程序中的实体对象直接保存到数据库中。下次要取的时候就可以直接将XML[/b]反序列化成实体对象。对于数据量不是很大的情况下,可以考虑使用。 select * from Employee where [content].exist('//Age[text()>9000]')=1 此SQL[/b]语句中带有xpath的查询,可以找出employee表中content为XML[/b]类型列中子节点>9000的所有记录 看一下,运用. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using System.Xml[/b].Serialization; using System.IO; namespace DevTest { public partial class Form3 : Form { SqlConnection cn = new SqlConnection("server=192.168.1.100\\SqlExpress;uid=hpasc;pwd=9637004;database=filemanager"); public Form3() { InitializeComponent(); cn.Open(); } private void button1_Click(object sender, EventArgs e) { DataTable dt = cn.GetSchema(); this.dataGridView1.DataSource = dt; } private void button2_Click(object sender, EventArgs e) { DataTable dt = cn.GetSchema("Tables",null); this.dataGridView1.DataSource = dt; } private void button3_Click(object sender, EventArgs e) { //this.dataGridView1.DataSource = cn.GetSchema("IndexColumns", new string[] { "FileManager", "dbo", "Creers" }); SqlCommand cmd = new SqlCommand(); List<Employee> Emps = new List<Employee>(); cmd.CommandText = "insert into Employee values(@OID,@Name,@Age,@City,@Address,@Birthday,@Content)"; XmlSerializer ser = new XmlSerializer(typeof(Employee)); cmd.Connection = cn; cmd.Prepare(); this.textBox1.AppendText("生成对象时间" + System.DateTime.Now.ToString()); for(int i=0;i<10000;i++) { System.IO.MemoryStream ms = new System.IO.MemoryStream(); Employee emp=new Employee(); emp.Address="emp.Address"+i.ToString();; emp.Age=i; emp.Name="Name"+i.ToString(); emp.OID=Guid.NewGuid(); emp.Birthday=DateTime.Now.AddHours(-i); emp.City="City"+i.ToString(); ser.Serialize(ms,emp); ms.Position = 0; StreamReader sr = new StreamReader(ms); emp.Content = sr.ReadToEnd(); sr.Close(); Emps.Add(emp); } this.textBox1.AppendText("\r\n结束生成对象时间" + System.DateTime.Now.ToString()); this.textBox1.AppendText("\r\n开始数据插入" + System.DateTime.Now.ToString()); foreach(Employee emp in Emps) { cmd.Parameters.Clear(); cmd.Parameters.Add("@OID", SqlDbType.UniqueIdentifier).Value = emp.OID; cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 50).Value = emp.Name; cmd.Parameters.Add("@City", SqlDbType.NVarChar, 50).Value = emp.City; cmd.Parameters.Add("@Address", SqlDbType.NVarChar, 50).Value = emp.Address; cmd.Parameters.Add("@Age", SqlDbType.Int).Value = emp.Age; cmd.Parameters.Add("@Birthday", SqlDbType.DateTime).Value = emp.Birthday; cmd.Parameters.Add("@Content", SqlDbType.Xml[/b]).Value = emp.Content; cmd.ExecuteNonQuery(); } this.textBox1.AppendText("\r\n结否数据插入" + System.DateTime.Now.ToString()); } private void button4_Click(object sender, EventArgs e) { List<Employee> Emps = new List<Employee>(); XmlSerializer ser = new XmlSerializer(typeof(Employee)); this.textBox1.AppendText("\r\n开始取出数据对象时间" + System.DateTime.Now.ToString()); SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; cmd.CommandText = "select Content from Employee"; SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); foreach (DataRow dr in ds.Tables[0].Rows) { MemoryStream ms = new MemoryStream(); StreamWriter sr = new StreamWriter(ms); sr.WriteLine(dr[0].ToString()); sr.Flush(); ms.Position = 0; Employee emp=(Employee)ser.Deserialize(ms); Emps.Add(emp); sr.Close(); //Employee emp=(Emp) } this.textBox1.AppendText("\r\n结束反序列生成对象时间" + System.DateTime.Now.ToString()); this.dataGridView1.DataSource = Emps; } } [Serializable] public class Employee { Guid _OID; public Guid OID { get { return _OID; } set { _OID = value; } } string _Name; public string Name { get { return _Name; } set { _Name = value; } } int _Age; public int Age { get { return _Age; } set { _Age = value; } } string _Address; public string Address { get { return _Address; } set { _Address = value; } } DateTime _Birthday; public DateTime Birthday { get { return _Birthday; } set { _Birthday = value; } } string _City; public string City { get { return _City; } set { _City = value; } } string _Content; public string Content { get { return _Content; } set { _Content = value; } } } } |
相关文章推荐
- Sql2005中对XML类型字段的运用
- sql2005的xml字段类型在.net中的应用
- Sql2005中对XML类型字段的运用
- sql2005的xml字段类型在.net中的应用
- Sql2005中对XML类型字段的运用
- Sql2005中对XML类型字段的运用
- SQL2005 查询表字段信息(是否标示列 字段名 主键 字段类型 长度 小数位 允许空 默认值 说明)
- sql2005 若字段定义的类型为datetime,插入为''(空),那么会默认值为1900-01-01 00:00:00.000
- Oracle中通过:触发器,存储过程,Function调用实现解析Clob字段类型中存储的xml字符串
- oracle xml类型字段的索引
- oracle xmltype字段类型内容读取
- javax.xml处理接口类型字段的xml转换
- SqlServer表中XML类型字段查询操作
- 数据库字段类型 XML字段的操作
- c#向数据库中插入xml数据类型的字段
- sql2005 和 sql2008 表的 主键 字段 类型 长度 描述
- 利用SQL SERVER 2008 的XML字段类型实现扩展属性
- 运用Java如何存取Oracle中的CLOB类型字段
- Sql Server xml 类型字段的增删改查
- table字段是XMLTYPE类型时的修改