Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Microsoft C# Professional Projects - Premier Press.pdf
Скачиваний:
177
Добавлен:
24.05.2014
Размер:
14.65 Mб
Скачать

650 Project 5 CREATING A WEB PORTAL FOR A BOOKSTORE

Similarly, you can write the code for the Web methods that accept the author, the category, or the title as the parameter.

Creating the AcceptDetails() Web Method

In addition to providing the data to the Web site, DTWebService accepts the details of the customer who orders a book on the Web service. These details are then stored in the DTDB database.To perform this function, create another Web method, AcceptDetails(). The code for the AcceptDetails() Web method is as shown:

public string AcceptDetails(string ISBN, string DateOrder, string CustName, string CustAddr1, string CustAddr2, string CustCity, string CustState, string OrdBy, string OrdStat, string CardType, string CardNum)

{

string OrderNo; string error; error=””;

OrderNo = GenerateOrder();

string InsStr;

InsStr = “Insert Into DTOrders Values( @IN, @ON, @DO, @CN, @CA1, @CA2, @CC, @CS, @OB, @ST, @CT, @CCN)”;

try

{

SqlCommand InsCom;

InsCom = new SqlCommand(InsStr, sqlConnection1); sqlDataAdapter1.InsertCommand = InsCom; sqlDataAdapter1.InsertCommand.Parameters.Add(“@IN”, SqlDbType.Char,10).

Value = ISBN;

sqlDataAdapter1.InsertCommand.Parameters.Add(“@ON”, SqlDbType.Char,5). Value = OrderNo;

sqlDataAdapter1.InsertCommand.Parameters.Add(“@DO”,SqlDbType.DateTime,8). Value = Convert.ToDateTime(DateOrder).Date ;

sqlDataAdapter1.InsertCommand.Parameters.Add(“@CN”, SqlDbType.VarChar ,50). Value= CustName;

sqlDataAdapter1.InsertCommand.Parameters.Add(“@CA1”, SqlDbType.VarChar,50). Value= CustAddr1;

sqlDataAdapter1.InsertCommand.Parameters.Add(“@CA2”,SqlDbType.VarChar,50).

DEVELOPING WEB SERVICES

Chapter 29

 

651

 

 

 

 

 

 

Value=CustAddr2; sqlDataAdapter1.InsertCommand.Parameters.Add(“@CC”,SqlDbType.VarChar,20).

Value = CustCity;

sqlDataAdapter1.InsertCommand.Parameters.Add(“@CS”, SqlDbType.VarChar ,10). Value = CustState;

sqlDataAdapter1.InsertCommand.Parameters.Add(“@OB”,SqlDbType.VarChar , 50). Value=OrdBy;

sqlDataAdapter1.InsertCommand.Parameters.Add(“@ST”,SqlDbType.VarChar,20). Value=OrdStat;

sqlDataAdapter1.InsertCommand.Parameters.Add(“@CT”,SqlDbType.Char,10). Value=CardType;

sqlDataAdapter1.InsertCommand.Parameters.Add(“@CCN”,SqlDbType.VarChar,20). Value=CardNum;

if(sqlConnection1.State== ConnectionState.Closed )

{

sqlConnection1.Open ();

}

sqlDataAdapter1.InsertCommand.ExecuteNonQuery(); sqlConnection1.Close();

}

catch(Exception E1)

{

error = E1.Message;

}

string result;

if (error.Length != 0)

{

result = “Record Not Inserted due to the following reason: \n”+ error;

}

else

{

result = “Record Inserted!!”;

}

return result;

}

The preceding code declares a Web method with the name AcceptDetails() that returns a string type variable.This string type variable, result, returns a message

652 Project 5 CREATING A WEB PORTAL FOR A BOOKSTORE

whether the records are inserted in the DTDB database or not. If an error occurs while attempting to add the records to the DTDB database, the AcceptDetails() Web method returns an error.

In addition, the Web method declaration statement accepts 11 parameters, each corresponding to a field in the DTOrders table. These parameters include ISBN number, date of ordering, name of the customer, address of the customer, and so on. In addition, the credit card details of the customer are passed as a parameter to the Web method.

Inside the Web method, three string variables, OrderNo, error, and InsStr, are declared. The variable error is initialized to a null value. However, the OrderNo variable is initialized to the GenerateOrder() method. The GenerateOrder() method is used to autogenerate the order number for any order placed by a customer. You will learn to add code to the GenerateOrder() method later in this chapter.

Next, the code creates a SQL statement that inserts a value into the DTOrders table. To do this, an Insert statement is created.The Insert statement accepts 12 parameters, each corresponding to the parameter passed to the AcceptDetails() Web method. This Insert statement is then stored in the InsStr variable.

After creating the SQL statement, a try loop is used to enter records to the DTOrders table. Inside the try loop, an instance, InsCom, of the SqlCommand class is created and the Insert command is passed as a parameter to the constructor of the SqlCommand class. Then, the value of the parameter passed to the AcceptDetails() Web method is stored in the SqlParameterCollection object. This process is repeated for all of the 11 parameters.

Next, an if statement is used to check whether the connection to the DTDB database is closed or not. To do this, the State property of the SqlConnection class is used. If the connection is closed, the code opens the connection by using the Open() method.Then, the ExecuteNonQuery() method is used to return the records affected by the Insert statement and the connection to the SQL database is closed.

While adding records to the DTOrders table, if an exception is generated, the exception is caught in the catch loop and stored in the error variable. Next, a string type variable result is declared that returns the message stating whether the records are added to the database or not. To do this, the Length property of the String class is used. If the value in the Length property is equal to zero, an error

DEVELOPING WEB SERVICES

Chapter 29

653

 

 

 

 

message is displayed. However, if the records are added, a message confirming that the records are added is displayed. Figure 29-7 shows the message returned by the AcceptDetails() Web method.

FIGURE 29-7 The message returned by the AcceptDetails() Web method

Until now, I have not added a description for the AcceptDetails() Web method. To do this, add the following statement before the Web method:

[WebMethod(Description=”This method accepts the details of Customer who opt “ + “

for a book published by Deepthoughts Publications”)]

Creating the GenerateOrder() Web Method

As discussed earlier, when a customer places an order for a book, the details of the book and the customer are returned to the Web service. In addition, an order number for each order is generated automatically. To do this, you need to write code for the GenerateOrder() Web method.

However, first add a short description for the Web method.

[WebMethod(Description=”This method returns the order number of a customer”)]

654 Project 5 CREATING A WEB PORTAL FOR A BOOKSTORE

Now, add the following code to the Web service:

[WebMethod(Description=”This method returns the order number of a customer”)] public string GenerateOrder()

{

string SelStr;

SelStr = “Select Count(*) From DTOrders”;

SqlCommand SelCom;

SelCom = new SqlCommand(SelStr, sqlConnection1); sqlConnection1.Open(); sqlDataAdapter1.SelectCommand = SelCom; sqlDataAdapter1.Fill(dsDetails1,”Details”); sqlConnection1.Close();

string str;

str = dsDetails1.Tables[“Details”].Rows[0][0].ToString (); int val;

val = Convert.ToInt32(str); val= val+1;

if(val>0 & val<=9)

{

str = “O000” + Convert.ToString(val);

}

else if(val>9 & val<=99)

{

str =”O00” + Convert.ToString (val);

}

else if(val>99 & val <=999)

{

str = “O0” + Convert.ToString (val);

}

else

{

str = “O” + Convert.ToString (val);

}

return str;

}

DEVELOPING WEB SERVICES

Chapter 29

655

 

 

 

 

The preceding code declares a public Web method named GenerateOrder() that returns a string containing the generated order number. Inside the method declaration statement, a string type variable named SelStr is declared. This variable is then initialized to a SQL statement that selects all the records in the DTOrders table. Next, an instance of the SqlCommand class is created and initialized to the SQL statement stored in the SelStr variable.

Then, the Open() method is used to open the SQL connection to the DTOrders table. Next, the records in the DTOrders table are selected using the SelectCommand property. These records are then added to the dsDetails dataset by using the Fill() method and the connection to the DTOrders table is closed.

The code then declares a string type variable named str and initializes it to a collection of rows in the DTOrders table. To do this, the Rows property of the DataRowCollection class is used. The value returned by the Rows property is co nverted to a string value by using the ToString() method and stored in the str variable. Next, an integer type variable, val, is declared and initialized to the 32-bit signed integer equivalent of the value stored in the str variable. To convert the string type variable to the 32-bit signed integer variable, you use the ToInt property of

the System.Convert class.

The value stored in the variable val is the number of records in the DTOrders table. Therefore, to generate the next order number, you need to add 1 to the value in the variable val. Then, an if loop is used to find the range of the value in the variable val. If this value lies in the range 0 to 9, the string, O000, is added to this value. However, to do this, you again need to convert the value in the variable val to a string type value.

Similarly, if the value in the variable val lies in the range 9 to 99, the string O00 is added to the value. Therefore, the range of the value is found out and O followed by zeros is added to make the order number a four-digit number. This value stored in the variable str is returned by the Web method.

After writing the code for the GenerateOrder() Web method, you can test the Web method. On testing the Web method, an order number is returned,as shown in Figure 29-8.

656 Project 5 CREATING A WEB PORTAL FOR A BOOKSTORE

FIGURE 29-8 The order number returned by the GenerateOrder() Web method

Now look at the entire code for the Web service project that you created.This will help you enhance your understanding of the Web service.

using System;

using System.Collections; using System.ComponentModel; using System.Data;

using System.Diagnostics; using System.Web;

using System.Web.Services; using System.Data.SqlClient ;

namespace DTWebService

{

[WebService (Namespace=”http://LocalHost/DTWebService/”, Description=”A service displaying catalogs of Deepthoughts Publications “)]

public class Service1 : System.Web.Services.WebService

{

public Service1()

DEVELOPING WEB SERVICES

Chapter 29

657

 

 

 

 

{

InitializeComponent();

}

private System.Data.SqlClient.SqlCommand sqlSelectCommand1; private System.Data.SqlClient.SqlCommand sqlInsertCommand1; private System.Data.SqlClient.SqlCommand sqlUpdateCommand1; private System.Data.SqlClient.SqlCommand sqlDeleteCommand1; private System.Data.SqlClient.SqlConnection sqlConnection1; private System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1; private DTWebService.dsDetails dsDetails1;

[WebMethod(Description=”This method accepts the details of Customer who opt“ +” for a book published by Deepthoughts Publications”)]

public string AcceptDetails(string ISBN, string DateOrder, string CustName, string CustAddr1, string CustAddr2, string CustCity, string CustState, string OrdBy, string OrdStat, string CardType, string CardNum)

{

string OrderNo; string error; error=””;

OrderNo = GenerateOrder(); string InsStr;

InsStr = “Insert Into DTOrders Values( @IN, @ON, @DO, @CN, @CA1, @CA2, @CC, @CS, @OB, @ST, @CT, @CCN)”;

try

{

SqlCommand InsCom;

InsCom = new SqlCommand(InsStr, sqlConnection1); sqlDataAdapter1.InsertCommand = InsCom; sqlDataAdapter1.InsertCommand.Parameters.Add(“@IN”, SqlDbType.Char,10).

Value = ISBN;

sqlDataAdapter1.InsertCommand.Parameters.Add(“@ON”, SqlDbType.Char,5). Value = OrderNo;

sqlDataAdapter1.InsertCommand.Parameters.Add(“@DO”, SqlDbType.DateTime,8).Value = Convert.ToDateTime(DateOrder).Date ;

658

Project 5

CREATING A WEB PORTAL FOR A BOOKSTORE

 

 

sqlDataAdapter1.InsertCommand.Parameters.Add(“@CN”, SqlDbType

 

 

 

 

.VarChar ,50).Value= CustName;

 

 

sqlDataAdapter1.InsertCommand.Parameters.Add(“@CA1”, SqlDbType

 

 

.VarChar,50).Value= CustAddr1;

 

 

sqlDataAdapter1.InsertCommand.Parameters.Add(“@CA2”,SqlDbType

 

 

.VarChar,50).Value=CustAddr2;

 

 

sqlDataAdapter1.InsertCommand.Parameters.Add(“@CC”,SqlDbType

 

 

.VarChar,20).Value = CustCity;

 

 

sqlDataAdapter1.InsertCommand.Parameters.Add(“@CS”, SqlDbType

 

 

.VarChar ,10).Value = CustState;

 

 

sqlDataAdapter1.InsertCommand.Parameters.Add(“@OB”,SqlDbType

 

 

.VarChar , 50).Value=OrdBy;

Y

 

 

 

L

 

 

sqlDataAdapter1.InsertCommand.Parameters.Add(“@ST”,SqlDbType

 

 

 

F

 

 

.VarChar,20).Value=OrdStat;

 

 

 

sqlDataAdapter1.InsertCommand.Parameters.Add(“@CT”,SqlDbType

 

 

 

M

 

 

 

.Char,10).Value=CardType;

 

 

 

sqlDataAdapter1A.InsertCommand.Parameters.Add(“@CCN”,SqlDbType

 

 

.VarChar,20).Value=CardNum;

 

 

 

E

 

 

 

T

 

 

if(sqlConnection1.State== ConnectionState.Closed )

{

sqlConnection1.Open ();

}

sqlDataAdapter1.InsertCommand.ExecuteNonQuery(); sqlConnection1.Close();

}

catch(Exception E1)

{

error = E1.Message;

}

string result;

if (error.Length != 0)

{

result = “Record Not Inserted due to the following reason: \n”+ error;

}

Team-Fly®

DEVELOPING WEB SERVICES

Chapter 29

659

 

 

 

 

else

{

result = “Record Inserted!!”;

}

return result;

}

[WebMethod(Description=”This method searches for the details of all books published by Deepthoughts Publications “)]

public DataSet SearchALL()

{

string SelStr;

SelStr = “Select * from DTCatalog”;

SqlCommand SelCom;

SelCom = new SqlCommand(SelStr, sqlConnection1); sqlDataAdapter1.SelectCommand = SelCom; sqlConnection1.Open(); sqlDataAdapter1.SelectCommand.ExecuteNonQuery(); sqlDataAdapter1.Fill(dsDetails1,”Details”); sqlConnection1.Close();

return dsDetails1;

}

[WebMethod(Description=”This method searches for the details of the book based on the “ +” ISBN Number of the book”)]

public DataSet SrchISBN(string ISBN)

{

string SelStr;

SelStr = “Select * from DTCatalog where ISBNNo = @ISB”;

SqlCommand SelCom;

SelCom = new SqlCommand(SelStr, sqlConnection1); sqlDataAdapter1.SelectCommand = SelCom; sqlDataAdapter1.SelectCommand.Parameters.Add(“@ISB”,SqlDbType.Char, 10)

.Value = ISBN; sqlConnection1.Open();

sqlDataAdapter1.SelectCommand.ExecuteNonQuery(); sqlDataAdapter1.Fill(dsDetails1,”Details”);

660 Project 5 CREATING A WEB PORTAL FOR A BOOKSTORE

sqlConnection1.Close();

return dsDetails1;

}

[WebMethod(Description=”This method searches for the details of the book based on the “ + “ the name of the Author”)]

public DataSet SrchAuthor(string Author)

{

string SelStr;

SelStr = “Select * from DTCatalog where Author = @AU”;

SqlCommand SelCom;

SelCom = new SqlCommand(SelStr, sqlConnection1); sqlDataAdapter1.SelectCommand = SelCom; sqlDataAdapter1.SelectCommand.Parameters.Add(“@AU”,SqlDbType.

VarChar , 50).Value = Author; sqlConnection1.Open(); sqlDataAdapter1.SelectCommand.ExecuteNonQuery(); sqlDataAdapter1.Fill(dsDetails1,”Details”); sqlConnection1.Close();

return dsDetails1;

}

[WebMethod(Description=”This method searches for the details of the book based on the “ +” the Catalog of the books”)]

public DataSet SrchCategory(string Catalog)

{

string SelStr;

SelStr = “Select * from DTCatalog where Category = @CA”;

SqlCommand SelCom;

SelCom = new SqlCommand(SelStr, sqlConnection1); sqlDataAdapter1.SelectCommand = SelCom; sqlDataAdapter1.SelectCommand.Parameters.Add(“@CA”,SqlDbType.Char , 10)

.Value = Catalog; sqlConnection1.Open();

sqlDataAdapter1.SelectCommand.ExecuteNonQuery(); sqlDataAdapter1.Fill(dsDetails1,”Details”); sqlConnection1.Close();

DEVELOPING WEB SERVICES

Chapter 29

661

 

 

 

 

return dsDetails1;

}

[WebMethod(Description=”This method searches for the details of the book based on the “ + “ the Title of the books”)]

public DataSet SrchTitle(string BkTitle)

{

string SelStr;

SelStr = “Select * from DTCatalog where BookTitle = @BT”;

SqlCommand SelCom;

SelCom = new SqlCommand(SelStr, sqlConnection1); sqlDataAdapter1.SelectCommand = SelCom; sqlDataAdapter1.SelectCommand.Parameters.Add(“@BT”,SqlDbType.VarChar , 50)

.Value = BkTitle; sqlConnection1.Open();

sqlDataAdapter1.SelectCommand.ExecuteNonQuery(); sqlDataAdapter1.Fill(dsDetails1,”Details”); sqlConnection1.Close();

return dsDetails1;

}

[WebMethod(Description=”This method returns the order number of a customer”)] public string GenerateOrder()

{

string SelStr;

SelStr = “Select Count(*) From DTOrders”;

SqlCommand SelCom;

SelCom = new SqlCommand(SelStr, sqlConnection1); sqlConnection1.Open(); sqlDataAdapter1.SelectCommand = SelCom; sqlDataAdapter1.Fill(dsDetails1,”Details”); sqlConnection1.Close();

string str;

str = dsDetails1.Tables[“Details”].Rows[0][0].ToString (); int val;

val = Convert.ToInt32(str);