Narisa.com: dataset convert to Array Object (webservices) ทำไงครับ - Narisa.com

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

dataset convert to Array Object (webservices) ทำไงครับ webservices return type array แทน dataset Rate Topic: -----

#1 User is offline   Light 

  • Newbie
  • Pip
  • Group: Members
  • Posts: 10
  • Joined: 01-August 08

  Posted 18 August 2009 - 08:34 PM

ผมทำ websevices Return type ออกมาเป็น Object DataSet ครับ ซึ่งผมลืมไปว่า พอเป็น webservice ไม่ได้มีแค่ .NET เท่านั้นที่เป็นตัว Client มาเรียก ซึ่งมีโอกาสที่ Client จะเป็น JAVA ,PHP หรือ ภาษาอื่นๆมาเรียกก็ได้
ผมจึงอยากเปลียน จากเปลียน dataset เป็น array Object แทน ครับ

ผมทำตามตัวอย่างตามเว็บไซต์ด้านล่างครับ มัน error นะครับ ผมดูตัวอย่างยังไม่ละเอียดเท่าไหร่ครับ
ขอตัวอย่าง soure code หน่อยครับเอาละเอียดกว่าตัวอย่างหน่อยนะครับ
http://www.bloggang.com/viewdiary.php?id=w...p=2&gblog=4


อยากให้เป็น return เป็น array แบบตัวอย่าง xml นี้ครับ

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfProvince xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/webSerOR/Service1">
<Province>
<Name>กรุงเทพมหานคร</Name>
<Id>10</Id>
</Province>
<Province>
<Name>สมุทรปราการ</Name>
<Id>11</Id>
</ArrayOfProvince>

==================== code ที่ผมแก้ตามเว็บไซต์ด้านล่างครับ แต่มัน error ครับไม่รู้ต้องเพิ่มเติมอะไรอีกหรือเปล่า ช้วยแนะด้วยครับ ====
http://www.bloggang.com/viewdiary.php?id=w...p=2&gblog=4
-------------------------------------------------------------------------------------------------------

using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;

using System.Configuration;
using System.Data.OleDb;
using System.Data.SqlClient;

namespace Metsai
{
/// <summary>
/// Summary description for Service1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{

string strConn = ConfigurationManager.ConnectionStrings["strConn"].ConnectionString;
OleDbConnection conn;
OleDbCommand com;
OleDbDataReader dr;
OleDbDataAdapter dt;


public Service1()
{

//Uncomment the following line if using designed components
//InitializeComponent();
}


[WebMethod]
public Food[] Display(string prov, string amphur, string type, string key)
{
conn = new OleDbConnection(strConn);
if (conn.State == ConnectionState.Open) conn.Close();
conn.Open();



string field;
if (prov != "" && amphur != "" && type != "")
{
field = " WHERE(AmpID=" + amphur + " AND Ref_PlaFoodShopType_ID=" + type + " AND PlaFood_Name LIKE '%" + key + "%')";
}
else if (prov != "" && type != "")
{
field = " WHERE(ProvID=" + prov + " AND Ref_PlaFoodShopType_ID=" + type + " AND PlaFood_Name LIKE '%" + key + "%')";
}
else if (prov != "")
{
field = " WHERE(ProvID=" + prov + " AND PlaFood_Name LIKE '%" + key + "%')";
}
else
{
field = " WHERE(PlaFood_Name LIKE '%" + key + "%')";
}

DataSet ds = new DataSet();

string sql = "SELECT f.*,a.AmpName,p.ProvName";
sql += " FROM (Amphur AS a INNER JOIN PlaceFood AS f ON a.AmpID = f.RefAmpID)";
sql += " INNER JOIN Province p ON(a.RefProvID = p.ProvID)";
sql += field;

dt = new OleDbDataAdapter(sql, conn);
dt.Fill(ds, "food");

Food[] foodList = null;

if (ds != null && ds.Tables.Count > 0)
{
DataTable myTable = ds.Tables[0];
foodList = new Food[ds.Tables[0].Rows.Count];
int i = 0;

foreach (DataRow myRow in myTable.Rows)
{

foodList[i] = new Food();
foodList[i].PlaFood_ID = myRow[myTable.Columns[0]].ToString();
foodList[i].PlaFood_Name = myRow[myTable.Columns[1]].ToString();
foodList[i].Ref_PlaFoodShopType_ID = myRow[myTable.Columns[2]].ToString();
foodList[i].PlaFood_Detail = myRow[myTable.Columns[3]].ToString();
foodList[i].PlaFood_Address = myRow[myTable.Columns[5]].ToString();
foodList[i].RefAmpID = myRow[myTable.Columns[6]].ToString();
foodList[i].PlaFood_Phone = myRow[myTable.Columns[8]].ToString();
foodList[i].PlaFood_Website = myRow[myTable.Columns[9]].ToString();
foodList[i].AmpName = myRow[myTable.Columns[10]].ToString();
foodList[i].ProvName = myRow[myTable.Columns[11]].ToString();
i++;

}



}
return foodList;
}
}
}

This post has been edited by Light: 18 August 2009 - 09:24 PM

0

#2 User is offline   nantcom 

  • Junior Member
  • Pip
  • Group: MSP
  • Posts: 87
  • Joined: 25-October 07

Posted 20 August 2009 - 01:17 PM

ทำได้ง่ายๆ ครับ ถ้าจะเอาแบบตัวอย่างเลย ก็คือสร้างคลาส Province ขึ้นมาก่อน (Namespace ไหนก็ได้) ให้ทุกอย่างที่อยากมองเห็น เป็น Property ที่ Get/Set ได้

public class Province
{
	 public int Id {get; set;}
	 public string Name {get; set;}
}


จากนั้น แทนที่จะ Return DataSet ก็เป็น

[ WebMethod ]
public Province[] GetProvinces()
{
	 List<Province> _results = new List<Province>();

	 // connect to database
	 // while ( reader.Read() )
	 _results.Add( new Province() { Id=reader.GetInt32(0), Name=reader.GetString(1) } );

	return _results.ToArray();
}


แล้วก็จะได้ Output แบบที่ให้มาครับ :lol:
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users