Danh mục

Converting a DataSet to an ADO Recordset

Số trang: 15      Loại file: pdf      Dung lượng: 38.24 KB      Lượt xem: 9      Lượt tải: 0    
Thư viện của tui

Hỗ trợ phí lưu trữ khi tải xuống: 3,000 VND Tải xuống file đầy đủ (15 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

[ Team LiB ] Recipe 5.10 Converting a DataSet to an ADO Recordset Problem You need to convert a DataSet to an ADO Recordset so that you can use it in a legacy application. Solution You must persist the DataSet to XML, transform it to ADO Recordset schema, and load it into an ADO Recordset using COM interop
Nội dung trích xuất từ tài liệu:
Converting a DataSet to an ADO Recordset[ Team LiB ]Recipe 5.10 Converting a DataSet to an ADO RecordsetProblemYou need to convert a DataSet to an ADO Recordset so that you can use it in a legacyapplication.SolutionYou must persist the DataSet to XML, transform it to ADO Recordset schema, and loadit into an ADO Recordset using COM interop.Youll need a reference to the Primary Interop Assembly (PIA) for ADO provided in thefile ADODB.DLL. Select adodb from the .NET tab in Visual Studio .NETs AddReference Dialog.The sample uses one XML file:Orders.xslt The XSLT stylesheet used to transform the XML document output by the DataSet into an ADO Recordset XML document.The sample code contains one event handler and one method:Go Button.Click Converts the DataSet to an ADO Recordset using the following steps: 1. A shell XML document for the ADO Recordset is created. 2. A DataReader accesses the schema information for the data to convert using the GetSchemaTable( ) method. This information is mapped to and added to the ADO Recordset XML document. 3. The DataSet is loaded with data for a single DataTable. The XML document for the DataSet is transformed and written into the ADO Recordset XML document. 4. An ADO Recordset object is created and loaded with the ADO Recordset XML document. This completes the conversion. 5. The ADO Recordset is loaded into a DataTable using the OleDbDataAdapter. The default view for the table is bound to the data grid on the form to display the results of the conversion.GetDataTypeInfo( ) This method maps SQL Server specific types to data type attributes for the ds and rs namespaces used to serialize an ADO Rowset.The XSLT file is shown in Example 5-10.Example 5-10. File: Orders.xslt The C# code is shown in Example 5-11.Example 5-11. File: ConvertDataSetToAdoRecordsetForm.cs// Namespaces, variables, and constantsusing System;using System.Configuration;using System.Windows.Forms;using System.IO;using System.Text;using System.Xml;using System.Xml.Xsl;using System.Data;using System.Data.SqlClient;using System.Data.OleDb;private const String ADOXMLFILE = ConfigurationSettings.AppSettings[Temp_Directory] + ADO_Orders.xml;// . . .private void goButton_Click(object sender, System.EventArgs e){ Cursor.Current = Cursors.WaitCursor; String sqlText = SELECT * FROM Orders; // Create the connection. SqlConnection conn = new SqlConnection( ConfigurationSettings.AppSettings[Sql_ConnectString]); // Create the command to load all orders records. SqlCommand cmd = new SqlCommand(sqlText, conn); conn.Open( ); // Create a DataReader from the command. SqlDataReader dr = cmd.ExecuteReader( CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo); // Create a table of the schema for the DataReader. DataTable schemaTable = dr.GetSchemaTable( ); // Create an XML document. XmlDocument xmlDoc = new XmlDocument( ); // Add ADO namespace and schema definition tags to the XML document. String adoXml = + + + + + ; xmlDoc.LoadXml(adoXml); // Create a namespace manager for the XML document. XmlNamespaceManager nm = new XmlNamespaceManager(xmlDoc.NameTable); // Add ADO prefixes. nm.AddNamespace(s, uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882); nm.AddNamespace(dt, uuid:C2F41010-65B3-11d1-A29F-00AA00C14882); nm.AddNamespace(rs, urn:schemas-microsoft-com:rowset);nm.AddNamespace(z, #RowsetSchema);// Select the s:ElementType node.XmlNode curNode = xmlDoc.SelectSingleNode(//s:ElementType, nm);XmlElement xe = null;XmlAttribute xa = null;// Iterate through the schema records for the DataReader.foreach(DataRow sr in schemaTable.Rows){ // Create an AttributeType element for the schema record. xe = xmlDoc.CreateElement(s, AttributeType, uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882); // Get the data type. SqlDbType sqlDbType = (SqlDbType)sr[ProviderType]; // Create the name attribute. xa = xmlDoc.CreateAttribute(, name, ); xa.Value = sr[ColumnName].ToString( ); xe.SetAttributeNode(xa); // Create the number attribute. xa = xmlDoc.CreateAttribute(rs, number, urn:schemas-microsoft-com:rowset); xa.Value = ((int)sr[ColumnOrdinal] + 1).ToString( ); xe.SetAttributeNode(xa); // Add attribute if null values are allowed in the column. if((bool)sr[AllowDBNull]) { xa = xmlDoc.CreateAttribute(rs, nullable, urn:schemas-microsoft ...

Tài liệu được xem nhiều: