The first electronic shopping program is being modified to handle the reading / update problem of shopping orders and orders. They are divided into two tables in the database.
ORDER and
ORDERDETAILS. Now you have to read their data and create a
ORDER's data entity is used in the process. When I started, I considered it.
IDataReader reads data, that is, open two database connections, one to read
Order, one is used to read
ORDERDETAILS. Later, I feel trouble, I started to consider using it.
XML SHEMA creates a dataset and then uses SQLServer's
XML function returns one
XmlReader, read this
Typened DataSet, but because of DataSet, worry
The influence of performance, wrote a small program to test its performance. During the debugging process, the fault discovery, the fastest way should be
Use XMLReader iteration returned to the XML string. The program is as follows:
First, use the for XML's SQL statement to generate XML in SQL Server:
Alter Procedure Shop_getorders2 (@Blogid Bigint)
AS
SELECT 1 as tag,
Null As Parent,
O.Orderid AS [Order! 1! Order],
O.userid as [Order! 1! UserID],
O.Useremail as [Order! 1! UseMail],
O.usermobile as [Order! 1! Usermobile],
O.userim as [Order! 1! Userim],
O.Receipt as [Order! 1! Receipt],
O.city as [Order! 1! City],
O.address as [Order! 1! Address],
O.Postcode As [Order! 1! Postcode],
O. IUSERTEL AS [ORDER! 1! Usertel],
O.DELIVERYMETHOD AS [Order! 1! DeliveryMethod],
O.DELIVERFEE AS [ORDER! 1! Deliverfee],
O.PAYMETHOD AS [Order! 1! PayMethod],
O.RealName as [Order! 1! RealName],
Case O.vip when 1 Ten 'True' When 0 Then 'false' end as [Order! 1! VIP],
O.Blogid as [Order! 1! BlogID],
O. usrtitle as [Order! 1! UserTitle],
O.insertdate as [Order! 1! InsertDate],
NULL AS [Detail! 2! ProductID],
NULL AS [Detail! 2! Unitprice],
NULL AS [Detail! 2! Unitscore],
NULL AS [Detail! 2! Number]
From Orders O
Where o.blogid = @blogid
Union all
SELECT 2 as tag,
1 as parent,
O.Orderid AS [Order! 1! Order],
NULL AS [Order! 1! UserId],
Null As [Order! 1! UseMail],
NULL AS [Order! 1! Usermobile],
NULL AS [Order! 1! Userim],
Null as [Order! 1! Receipt],
Null As [Order! 1! City],
Null As [Order! 1! Address],
NULL AS [Order! 1! Postcode],
NULL AS [Order! 1! Usertel],
NULL AS [Order! 1! DeliveryMethod],
NULL AS [Order! 1! Deliverfee], NULL AS [Order! 1! Paymethod],
NULL AS [Order! 1! RealName],
NULL AS [Order! 1! VIP],
NULL AS [Order! 1! BlogID],
NULL AS [Order! 1! UserTiti],
NULL AS [Order! 1! Insertdate],
Od.Productid AS [Detail! 2! ProductID],
Od.Unitprice as [detail! 2! Unitprice],
Od.Unitscore as [Detail! 2! Unitscore],
Od.Number As [Detail! 2! Number]
From Orders O, OrderDetails OD
Where o.orderid = od.orderid and o.blogid = @BlogID
For XML EXPLICIT
The following program resolves the content:
[Stathread]
Static void main (string [] args)
{
For (int i = 0; i <200; i )
{
System.threading.thread thread = new system.threading.Thread (new system.threading.threadstart (run1));
Thread.start ();
}
DONE.SET ();
Console.read ();
}
Public static system.threading.manualReveTevent Done = new system.threading.manualResetEvent (false); // thread concurrent control
Public Static void Run1 ()
{
DONE.waitone ();
SqlConnection conn = new SqlConnection ("UID = SA; PWD = SA; Database = Shop; Server = Chris");
Try
{
SqlCommand comm = conn.CreateCommand (); comm.CommandText = "shop_getorders2"; comm.CommandType = CommandType.StoredProcedure; comm.Parameters.Add (new SqlParameter ( "@ BlogID", 1)); conn.Open (); System .XML.XMLReader reader = comm.executexmlreader (); // ORDERSDATA DS = New Ordersdata (); console.writeline () "/ t"); while (reader.read ()) {IF (reader.NodeType == System.Xml.XmlNodeType.Element && reader.LocalName == "Order") {reader.GetAttribute ( "OrderID"); reader.GetAttribute ( "userid"); Console.WriteLine (reader.GetAttribute ( "useremail ") " ---------------------------------------------- -------------- "); Reader.GetaTRibute (" UserMobile "); Reader.GetaTRibute (" Userim "); Reader.GetaTribute (" Receipt "); Reader.GetaTribute (" City "); reader.GetAttribute (" address "); reader.GetAttribute (" postcode "); reader.GetAttribute (" usertel "); reader.GetAttribute (" deliverymethod "); reader.GetAttribute (" deliverfee "); reader. GetaTtribute ("PayMethod"); Reader.GetaTRibute ("VIP"); Reader.GetaTRibute ("BL OGID "); Reader.GetaTRibute (" insertdate "); Reader.GetaTRibute (" useertle "); while (reader.LocalName ==" Order "&& Reader.NodeType == System.xml. XmlNodeType.EndElement) {break;} if (reader.NodeType == System.Xml.XmlNodeType.Element && reader.LocalName == "Detail") {reader.GetAttribute ( "ProductID"); Console.WriteLine (reader.GetAttribute ( "Unitprice"); Reader.GetaTRibute ("Unitscore"); Reader.GetaTribute ("
");}}}}} Finally}}}} finally {conn.close ();}} This method is when the 200 thread is read and read, and the data is more than 1-2 seconds than the two Connection read data. Ratio DataSet's readxml is more than 4 seconds, and 9CBS's editor is really difficult. Why don't you love? FreetextBox or fckeditor can, the key is to support multiple browsers, and 9CBS, in Firefox The following is not available at all.