.:: CODE SNIPPET ::.

"Your time is limited, so don't waste it living someone else's life"

Kết nối với SQL server bằng web serice


Phần 1: Tạo ra một web service sử dụng SQL server
Mình sẽ tạo ra một web service đơn giản dùng .NET.
+ Tạo một file DataProvider để tương tác với SQL server. Nội dung đơn giản như sau:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace ExampleWebservice
{
    class DataProvider
    {
        protected string connectionString = @"Data Source=PRMHUITEDU-PCSQLEXPRESS;Initial Catalog=TestWebservice;Integrated Security=True";
        public SqlConnection connection;

        public DataProvider()
        {
            this.connection = new SqlConnection(connectionString);
        }

        public bool Connect()
        {
            try
            {
                connection.Open();
            }
            catch (System.Exception e)
            {
                //System.Windows.Forms.MessageBox.Show(_error);
                return false;
            }
            return true;
        }

        public void Disconnect()
        {
            connection.Close();
        }

        #region "Execute_Query"
        //Insert query
        protected bool _ExecuteQuery(string pStrQuery)
        {
            if (connection.State == System.Data.ConnectionState.Closed)
            {
                if (!Connect())
                {
                    return false;
                }
            }

            SqlCommand command = new SqlCommand(pStrQuery, this.connection);
            int kq = 0;
            try
            {
                kq = command.ExecuteNonQuery();
            }
            catch (SqlException el)
            {
            }
            if (kq <= 0)
            {
                return false;
            }
            return true;
        }

        public DataSet _Select(string pStrSelect)
        {
            if (connection.State == System.Data.ConnectionState.Closed)
            {
                if (!Connect())
                {
                    Connect();
                }
            }
            SqlCommand cmd = new SqlCommand(pStrSelect, connection);
            cmd.CommandType = CommandType.StoredProcedure;

            SqlDataAdapter adap = new SqlDataAdapter(cmd);
            DataSet table = new DataSet();

            adap.Fill(table);
            return table;
        }
        public DataSet _Select(string pStrSelect, string paccount)
        {
            if (connection.State == System.Data.ConnectionState.Closed)
            {
                if (!Connect())
                {
                    Connect();
                }
            }
            SqlCommand cmd = new SqlCommand(pStrSelect, connection);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@account", SqlDbType.NVarChar).Value = paccount;
            SqlDataAdapter adap = new SqlDataAdapter(cmd);
            DataSet table = new DataSet();

            adap.Fill(table);
            return table;
        }
        #endregion
    }
}


+ Tạo ra một Web application đơn giản và sử dụng class trên để thao tác tạo ra các webmethod.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Web.Services;

namespace SampleDotNetWebService
{
WebService(Namespace = "http://hoangminhuit.org/")
WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)
System.ComponentModel.ToolboxItem(false)
public class Service1 : System.Web.Services.WebService
{
DataProvider provider;

public Service1()
{
provider = new DataProvider();
provider.Connect();
}
WebMethod
public bool ConnectionSQL()
{
// bool res = false;
provider = new DataProvider();
return provider.Connect();

}
WebMethod
public DataSet selectAlluser()
{
DataSet tbl = new DataSet();
//List lst = new List();
string sql = "getAllAccount";
tbl = provider._Select(sql);
return tbl;
}
WebMethod
public DataSet selectOneuser(String paccount)
{
DataSet tbl = new DataSet();
string sql = "getOneAccount";
tbl = provider._Select(sql,paccount);
return tbl;
}
}
}

+ Sau khi viết xong web service việc bạn cần làm là khởi động để web service chạy.(đơn giản là Ctrl+F5 thui). Nếu web service không chạy thì hãy kiểm trạ lại IIS của bạn đã kích hoạt hay chưa. Bạn cũng có thể tạo ra một web form đơn giản để test những hàm của web service xem chúng có thực hiện đúng hay không nha. Nếu không xuống bên dưới gặp lỗi là hổng biết đâu.

Phần 2: Tạo một ứng dụng android để khai thác web service
+ Đầu tiên là bạn phải download thư viện soap về include vào một ứng dụng android cần tạo(có thể download soap tại đây)
Lưu ý: SOAP (Simple Object Access Protocol) là giao thức gọi chuẩn của web service, nó dựa trên nền tảng là XML.
+ Tiếp đền bạn tạo ra lớp WebserviceCaller để giao tiếp trực tiếp với web service mà bạn đã tạo ra ở trên. Lớp này sử dụng bộ thư viện soap mà chúng ta đã download về để tạo ra các thủ tục gọi các hàm được web service cung cấp.

package com.windrealm.android;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.util.Log;

public class WebserviceCaller {
private final String NAMESPACE = "http://hoangminhuit.org/";
private final String URL = "http://10.0.2.2:50761/Service1.asmx?WSDL";

// private final String URL = "http://localhost:50761/Service1.asmx?WSDL";
public boolean connectSQL() {
boolean res = false;

final String SOAP_ACTION = "http://hoangminhuit.org/ConnectionSQL";
final String METHOD_NAME = "ConnectionSQL";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true; // put this only if the web service is .NET one
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
Log.i("myApp", response.toString());
if (response.toString().equalsIgnoreCase("true")) {
res = true;
}
} catch (Exception e) {
e.printStackTrace();
}

return res;
}

public ArrayList selectAlluser() {
String count = "";
ArrayList lst = new ArrayList();
final String SOAP_ACTION = "http://hoangminhuit.org/selectAlluser";
final String METHOD_NAME = "selectAlluser";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

SoapObject table = null;
SoapObject client = null;
SoapObject tableRow = null;
SoapObject responseBody = null;

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

try {

androidHttpTransport.call(SOAP_ACTION, envelope);
responseBody = (SoapObject) envelope.getResponse();

responseBody = (SoapObject) responseBody.getProperty(1);
table = (SoapObject) responseBody.getProperty(0);

for (int i = 0; i < table.getPropertyCount(); i++) {
Employee dto = new Employee();
String x = "";
SoapObject row = (SoapObject) table.getProperty(i);
dto.setName(row.getProperty("account").toString());
dto.setPhone(row.getProperty("phone").toString());
dto.setEmail(row.getProperty("email").toString());
x.trim();
lst.add(dto);
}
} catch (Exception e) {
e.printStackTrace();
count = e.toString();
}
return lst;
}

public Employee selectOneuser(String paccount) {
Employee emp = new Employee();
final String SOAP_ACTION = "http://hoangminhuit.org/selectOneuser";
final String METHOD_NAME = "selectOneuser";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

SoapObject table = null;
SoapObject client = null;
SoapObject tableRow = null;
SoapObject responseBody = null;

PropertyInfo propInfo1 =new PropertyInfo();
propInfo1.setName("paccount");
propInfo1.setValue(paccount);
propInfo1.setType(String.class);
request.addProperty(propInfo1);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

try {

androidHttpTransport.call(SOAP_ACTION, envelope);
responseBody = (SoapObject) envelope.getResponse();

responseBody = (SoapObject) responseBody.getProperty(1);
table = (SoapObject) responseBody.getProperty(0);

tableRow = (SoapObject) table.getProperty(0);
emp.setName(tableRow.getProperty("account").toString());
emp.setPhone(tableRow.getProperty("phone").toString());
emp.setEmail(tableRow.getProperty("email").toString());

} catch (Exception e) {
e.printStackTrace();
}
return emp;
}
}
Advertisements

2 responses to “Kết nối với SQL server bằng web serice

  1. Pingback: Thêm chức năng search vào listview trong android « .:: Hoàng Minh ::.

  2. nguyenhoai June 21, 2014 at 3:28 PM

    cho em hỏi, bây giờ em muốn cập nhật lại trạng thái của đơn hàng lên webservice, thì trên service em phải viết 1 hàm update như thế nào, và bên android em phải xử lý như thế nào để gọi được nói method đó?
    Em cảm ơn ạ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: