ช่วยหน่อยนะคะ เกี่ยวกับการ Merge DataTable ค่ะ คือเขียน คอนเน็คกับเซอฟเวอร์ จำนวน 8 เซอฟเวอร์ด้าน
คือเขียน คอนเน็คกับเซอฟเวอร์ จำนวน 8 เซอฟเวอร์
ด้านล่างเป็นการกำหนดชื่อ เซอฟร์เวอร์ที่จะคอนเน็ค และคอนเน็คไปยังเซอร์ฟเวอร์ต่างๆ ซื่ง คอนเนคได้ไม่มีปัญหาอะไรค่ะ
Code (C#)
public static ListItem[] GetSite()
{
ListItem[] item = { new ListItem("AIT"), new ListItem("SAB"), new ListItem("AIC"), new ListItem("AIG"), new ListItem("JCK"),new ListItem( "SPK"), new ListItem("JCB"), new ListItem("CTS") };
return item;
}
public static ClsServerSite GetServer(string RC, string Path)
{
ClsXML_Serialization xml = new ClsXML_Serialization();
List<ClsServerSite> List = xml.DeserializeFromXml<List<ClsServerSite>>(Path);
for (int i = 0; i <= List.Count - 1; i++)
{
if (List[i].RC_ == RC)
{
return List[i];
}
}
return null;
}
แต่ในส่วนของการ Select ข้อมูลแต่ละ เซอฟเวอร์ น่ะค่ะ ต้องการให้ เอาข้อมูลที่ได้แต่ละเซอฟเวอร์มารวมกันแล้วแสดงใน กริดวิว
โค้ดด้านล่างนี้ค่ะ
Code (C#)
protected void btnsearch_Click(object sender, EventArgs e)
{
//ตรวจสอบว่า user ได้เลือกที่จะแสดงข้อมูลของทุก Server หรือไม่
if (txtSearch.Text.Trim() != "")
{
if (ddlRC.Text == "ALL")
{
Session["servsite"] = "ALL";
StrQ();
ShowGridDataAll();
}
else
{
Session["servsite"] = ddlRC.Text;
StrQ();
ShowGridData(ddlRC.Text);
}
}
else
{
ScriptManager.RegisterStartupScript(this, typeof(string), "Message", "alert('กรุณาระบุเงื่อนใขการค้นหา');", true);
}
}
private void StrQ()
{
string STR = "";
STR = " Select * ";
STR += " From box_table ";
STR += " Where " + ddlSearch.Text + " like '%" + txtSearch.Text.Trim() + "%' ";
if (txtStartDate.Text.Trim() != "" && txtEndDate.Text.Trim() != "")
{
string startDate = txtStartDate.Text.Trim();
string endDate = txtEndDate.Text.Trim();
STR += " and commentdate >='" + startDate + " 00:00:00' ";
STR += " and commentdate <='" + endDate + " 23:59:00' ";
}
if (ddlstatus.Text != "ALL")
{
STR += " and commentstatus='" + ddlstatus.Text + "'";
}
if (txtgroupno.Text.Trim() != "")
{
STR += " and CoverGroup='" + txtgroupno.Text.Trim() + "'";
}
STR += " and comment_doc<>'' ";
STR += " Order by covergroup,coverlistno ;";
Session["strq"] = STR;
}
private void ShowGridDataAll()
{
//DataTable Main_DT = new DataTable();
ListItem[] item = GetSite();
for (int i = 0; i <= item.Length - 1; i++)
{
string rc = item[i].Value;
ClsServerSite RC = GetServer(rc, Server.MapPath("Config/ConfigSubSite.xml"));
ShowGridData(rc);
Main_DT.Merge(DT);
}
if (Main_DT.Rows.Count == 0)
{
ScriptManager.RegisterStartupScript(this, typeof(string), "Message", "alert('No data search');", true);
return;
}
GridData.DataSource = Main_DT;
GridData.DataBind();
}
private void ShowGridData(string strRC)
{
DT.Clear();
ClsServerSite RC = GetServer(strRC, Server.MapPath("Config/ConfigSubSite.xml"));
using (ClsDB_SQL SQL = new ClsDB_SQL())
{
if (SQL.ConnectSubSite(RC))
{
DT = SQL.Query_Select(Session["strq"] as string );
for (int i = 0; i <= DT.Rows.Count - 1; i++)
{
string sStatus = Convert.ToString(DT.Rows[i]["commentstatus"]);
if (sStatus == "Complete")
{
scomplete = scomplete + 1;
}
else if (sStatus == "Inprocess")
{
sinprocess = sinprocess + 1;
}
else
{
spending = spending + 1;
}
}
string chksite = Session["servsite"] as string;
if (chksite != "ALL")
{
if (DT.Rows.Count == 0)
{
ScriptManager.RegisterStartupScript(this, typeof(string), "Message", "alert('No data search');", true);
return;
}
GridData.DataSource = DT;
GridData.DataBind();
}
}
else
{
ScriptManager.RegisterStartupScript(this, typeof(string), "Message", "alert('Connecting Server Fail');", true);
return;
}
}
}
ปัญหาคือ มันไม่ยอม Merge ให้น่ะค่ะ จะได้มาแค่เซอฟเวอร์เดียว ตอนนี้คิดว่าติดที่มัน PostBack หรือเปล่า ดาต้าเทเบิ้ลเลยเคลียร์ไป
รบกวนด้วยนะคะ ลองมาทั้งวันแล้วค่ะ แก้ไม่ได้จริงๆ ใครมีแนวทางอื่นขอคำแนะนำด้วยนะคะTag : - - - -
Date :
2010-04-22 01:02:04
By :
njnight
View :
1831
Reply :
3
เวลาโค้ดเยอะ ก็ขี้เกียจอ่านเหมือนกันเนอะ
datatable มันมี method ให้ merge อยู่แล้วนี้ เวลาใช้ก็แบบนี้
Code (C#)
DataTable1.Merge(DataTable1);
Date :
2010-04-22 12:12:10
By :
tungman
ตอนนี้ใช้ เมทอดของมันค่ะ ตรงบันทัดที่ 083 ค่ะ
Code (C#)
Main_DT.Merge(DT);
แต่ปัญหาคือ พอ Select ข้อมูลจาก Server (วนลูปตามจำนวน Server) ต่อไปค่าที่เก็บใน Main_DT มันหายไปค่ะ ผลลัพธ์เลยได้เฉพาะ จาก Server สุดท้าย
ทำยังงัยถึงจะเก็บค่าใน Main_DT ไว้ได้ค่ะ
ยังไม่รู้วิธีแก้เลยค่ะ
Date :
2010-04-22 13:59:19
By :
njnight
ทำได้แล้วค่ะ ต้องเอาไปเเก็บใน Dataset ก่อนค่ะ
Date :
2010-04-22 16:41:51
By :
njnight
Load balance : Server 03