|
|
|
ผมจะ insert ข้อมูลลง database ผ่าน windows application form แล้วมันขึ้น error แบบนี้ครับช่วยทีครับ |
|
|
|
|
|
|
|
ตรง ds ที่รับข้อมูลที่ select มา มีข้อมูลอยู่หรือเปล่าครับ
** ฝั่ง web service return ค่ากลับมาเป็นชนิดอะไรครับ
ถ้าเป็น DataTable ไม่ได้นะครับ เปลี่ยนเป็น DataSet แทนครับ
|
|
|
|
|
Date :
2012-12-12 11:48:21 |
By :
Nameless |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ds ที่รับมามีข้อมูลอยู่คับคือข้อมูลที่จะ store ลง database คับ
นี้เป็น code ของทั้งสองฝั่งครับ
Code (C#)
[WebMethod()]
public DataTable SaveCustomer(string CusID,string CusName,string Mail,string CC,string Budget,string Used)
{
SqlConnection objConn = new SqlConnection();
SqlCommand objCmd = new SqlCommand();
SqlDataAdapter dtAdapter = new SqlDataAdapter();
DataSet ds = new DataSet();
DataTable dt = null;
string strConnString = null;
StringBuilder strSQL = new StringBuilder();
strConnString = "Server=BUILD-PC\\SQL2008R2;UID=sa;PASSWORD=simply10;database=mydatabase;Max Pool Size=400;Connect Timeout=600;";
//strSQL.Append(" SELECT * FROM customer ");
//strSQL.Append(" WHERE [CustomerID] = '" + strCusID + "' ");
strSQL.Append("INSERT INTO customer (CustomerID,Name,Email,CountryCode,Budget,Used) " + " VALUES " +
" ('" + CusID + "','" + CusName + "','" + Mail + "','" + CC + "','" + Budget + "','" + Used + "')");
objConn.ConnectionString = strConnString;
objConn.Open();
objCmd.Connection = objConn;
objCmd.CommandText = strSQL.ToString();
objCmd.CommandType = CommandType.Text;
dtAdapter.SelectCommand = objCmd;
dtAdapter.Fill(ds);
//dt = ds.Tables[0];
dtAdapter = null;
objConn.Close();
objConn = null;
return dt;
}
อันนี้เป็น code ของฝั่ง webserver ครับ
private void btnSave_Click(object sender, EventArgs e)
{
cusSave.getCustomerDetailSoapClient myCusSave = new cusSave.getCustomerDetailSoapClient();
DataTable dt = myCusSave.SaveCustomer(this.txtCusID.Text, this.txtName.Text, this.txtMail.Text, this.txtCC.Text, this.txtBudget.Text, this.txtUsed.Text);
//(this.txtCusID.Text,this.txtName.Text,
//this.txtMail.Text,this.txtBudget.Text,this.txtUsed.Text);
if (dt.Rows.Count > 0)
{
dt.Rows[0]["CustomerID"] = this.txtCusID.Text;
dt.Rows[0]["Name"] = this.txtName.Text;
dt.Rows[0]["Email"] = this.txtMail.Text;
dt.Rows[0]["CountryCode"] = this.txtCC.Text;
dt.Rows[0]["Budget"] = this.txtBudget.Text;
dt.Rows[0]["Used"] = this.txtUsed.Text;
//MessageBox.Show("Data has been added");
}
else
{
lblStatus.Visible = true;
this.lblStatus.Text = "Cannot add this record";
}
}
Client side code ...
ผมใช้ datatable ใน code นี้คับ
ฝั่ง server return เป็น datatable เหมือนกันคับ
|
|
|
|
|
Date :
2012-12-12 12:46:59 |
By :
buildbuilt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
web service มันไม่สามารถ return เป็น DataTable ได้ครับ
แก้ไขเป็น DataSet ทั้ง 2 ฝั่งครับ
|
|
|
|
|
Date :
2012-12-12 13:11:19 |
By :
Nameless |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ต้องเปลี่ยนทั้งสองฝั่งให้เป็น dataset ใช่ไหมคับ
ไม่มี datatable มาเกี่ยวข้องเลยใช่ไหมคับ
|
|
|
|
|
Date :
2012-12-12 13:37:10 |
By :
buildbuilt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พอจะบอกได้ไหมคับว่าต้องแก้ไขตรงไหนมั้งอะคับ
|
|
|
|
|
Date :
2012-12-12 13:39:46 |
By :
buildbuilt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (C#)
[WebMethod()]
public DataSet SaveCustomer(string CusID,string CusName,string Mail,string CC,string Budget,string Used)
{ // แก้จาก DataTable เป็น Dataset ครับ
SqlConnection objConn = new SqlConnection();
SqlCommand objCmd = new SqlCommand();
SqlDataAdapter dtAdapter = new SqlDataAdapter();
DataSet ds = new DataSet();
string strConnString = null;
StringBuilder strSQL = new StringBuilder();
strConnString = "Server=BUILD-PC\\SQL2008R2;UID=sa;PASSWORD=simply10;database=mydatabase;Max Pool Size=400;Connect Timeout=600;";
//strSQL.Append(" SELECT * FROM customer ");
//strSQL.Append(" WHERE [CustomerID] = '" + strCusID + "' ");
strSQL.Append("INSERT INTO customer (CustomerID,Name,Email,CountryCode,Budget,Used) " + " VALUES " +
" ('" + CusID + "','" + CusName + "','" + Mail + "','" + CC + "','" + Budget + "','" + Used + "')");
objConn.ConnectionString = strConnString;
objConn.Open();
objCmd.Connection = objConn;
objCmd.CommandText = strSQL.ToString();
objCmd.CommandType = CommandType.Text;
dtAdapter.SelectCommand = objCmd;
dtAdapter.Fill(ds);
dtAdapter = null;
objConn.Close();
objConn = null;
return ds; // แก้เป็น Return Dataset ครับ
}
Code (C#)
private void btnSave_Click(object sender, EventArgs e)
{
cusSave.getCustomerDetailSoapClient myCusSave = new cusSave.getCustomerDetailSoapClient();
DataSet ds = myCusSave.SaveCustomer(this.txtCusID.Text, this.txtName.Text, this.txtMail.Text, this.txtCC.Text, this.txtBudget.Text, this.txtUsed.Text);
//(this.txtCusID.Text,this.txtName.Text,
//this.txtMail.Text,this.txtBudget.Text,this.txtUsed.Text);
DataTable dt = ds.Tables[0]; // เพิ่มตรงนี้ครับ
if (dt.Rows.Count > 0)
{
dt.Rows[0]["CustomerID"] = this.txtCusID.Text;
dt.Rows[0]["Name"] = this.txtName.Text;
dt.Rows[0]["Email"] = this.txtMail.Text;
dt.Rows[0]["CountryCode"] = this.txtCC.Text;
dt.Rows[0]["Budget"] = this.txtBudget.Text;
dt.Rows[0]["Used"] = this.txtUsed.Text;
//MessageBox.Show("Data has been added");
}
else
{
lblStatus.Visible = true;
this.lblStatus.Text = "Cannot add this record";
}
}
ลองดูว่าได้หรือป่าวครับ
|
|
|
|
|
Date :
2012-12-12 14:00:53 |
By :
Niratiam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากคับผม
แต่ผมลองแก้ดูแล้วมันมาติดตรงที่ DataTable dt = ds.Tables[0]; อะคับ
มันบอกว่าหา table 0 ไม่เจอคับ
IndexOutOfRangeException was unhandled
Cannot find table 0.
|
|
|
|
|
Date :
2012-12-12 14:12:43 |
By :
buildbuilt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แบบที่ผมเข้าใจถูกไหมคับว่า ที่มันขึ้น error แบบนี้ก้เพราะว่า
ใน dataset ของเราไม่มี table อะไรเลยคับ เพราะว่าในกรณีผมต้องการจะ
insert ลง database แต่ถ้าเป็นการดึงมา display มันจะไม่มีปัญหาอะไรเลยคับ
|
|
|
|
|
Date :
2012-12-12 14:19:57 |
By :
buildbuilt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใช่ครับ เพราะ insert ลง ในฐานข้อมูลครับ ถ้าต้องการ display ให้ select ข้อมูลขึ้นมาใส่ Dataset แล้ว Return ค่ากลับครับ
|
|
|
|
|
Date :
2012-12-12 14:38:55 |
By :
Niratiam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ติด error เหมือนเดิมอะคับ มัน add ลงใน database คับ
แต่ว่าพอมันชึ้น error แล้วทำอะไรต่อไม่ได้เลยคับ
|
|
|
|
|
Date :
2012-12-12 15:41:42 |
By :
buildbuilt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
capture ตอน error มาให้ดูหน่อยครับ
|
|
|
|
|
Date :
2012-12-12 15:58:01 |
By :
Niratiam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าจากที่ผมดูแล้วเข้าใจ มันไม่ได้ทำการ SELECT ข้อมูลจาก Database ออกมาเก็บที่ DataSet เลย
Code (C#)
// จากในส่วน Web service
strSQL.Append("INSERT INTO customer (CustomerID,Name,Email,CountryCode,Budget,Used) " + " VALUES " +
" ('" + CusID + "','" + CusName + "','" + Mail + "','" + CC + "','" + Budget + "','" + Used + "')");
// คำสั่ง INSERT
objConn.ConnectionString = strConnString;
objConn.Open();
objCmd.Connection = objConn;
objCmd.CommandText = strSQL.ToString(); // objCmd เก็บคำสั่ง INSERT ไว้อยู่
objCmd.CommandType = CommandType.Text;
dtAdapter.SelectCommand = objCmd;
dtAdapter.Fill(ds);
dtAdapter = null;
objConn.Close();
objConn = null;
return ds; // ส่งค่ากลับมาเป็น DataSet แต่ไม่มีการ SELECT ข้อมูลจาก Database มาเลย ทำให้ไม่มีอะไร
เนื่องจากใน DataSet ที่ส่งกลับมามันไม่มีอะไร มันก็เลย Error ที่ DataTable dt = ds.Tables[0];
|
ประวัติการแก้ไข 2012-12-12 16:13:42
|
|
|
|
Date :
2012-12-12 16:12:11 |
By :
Nameless |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าเกิดเรา save ข้อมูลลง database ไม่จำเป็นต้อง select ใช่ไหมคับ
เพราะว่าเราไม่ได้ต้องการข้อมูล อะไรนอกจาก save ข้อมูลจาก form ลง database คับ
|
|
|
|
|
Date :
2012-12-12 16:15:13 |
By :
buildbuilt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (C#)
[WebMethod()]
public bool SaveCustomer(string CusID,string CusName,string Mail,string CC,string Budget,string Used)
{
SqlConnection objConn = new SqlConnection();
SqlCommand objCmd = new SqlCommand();
SqlDataAdapter dtAdapter = new SqlDataAdapter();
string strConnString = null;
StringBuilder strSQL = new StringBuilder();
strConnString = "Server=BUILD-PC\\SQL2008R2;UID=sa;PASSWORD=simply10;database=mydatabase;Max Pool Size=400;Connect Timeout=600;";
strSQL.Append("INSERT INTO customer (CustomerID,Name,Email,CountryCode,Budget,Used) " + " VALUES " +
" ('" + CusID + "','" + CusName + "','" + Mail + "','" + CC + "','" + Budget + "','" + Used + "')");
objConn.ConnectionString = strConnString;
objConn.Open();
objCmd.Connection = objConn;
objCmd.CommandText = strSQL.ToString();
objCmd.CommandType = CommandType.Text;
objConn.Close();
objConn = null;
return true;
}
Code (C#)
private void btnSave_Click(object sender, EventArgs e)
{
cusSave.getCustomerDetailSoapClient myCusSave = new cusSave.getCustomerDetailSoapClient();
bool tmp_bool = myCusSave.SaveCustomer(this.txtCusID.Text, this.txtName.Text, this.txtMail.Text, this.txtCC.Text, this.txtBudget.Text, this.txtUsed.Text);
if (tmp_bool == true)
{
MessageBox.Show("Data has been added");
}
else
{
lblStatus.Visible = true;
this.lblStatus.Text = "Cannot add this record";
}
}
ลองแบบนี้ครับ
|
ประวัติการแก้ไข 2012-12-12 16:29:59 2012-12-12 17:21:36
|
|
|
|
Date :
2012-12-12 16:29:10 |
By :
Niratiam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เดี่ยวจะลองดูน้ะคับ
แล้วจะมาบอกผลลัพอีกทีคับ
ขอบคุณมากคับบ
|
|
|
|
|
Date :
2012-12-12 16:34:01 |
By :
buildbuilt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมลองแล้วคับเรียบร้อย
ไม่มีปัญหาอะไร แต่ไม่มีอะไร add ลง database เลยคับบบ
:((
|
|
|
|
|
Date :
2012-12-14 00:05:40 |
By :
buildbuilt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ควรจะทำยังไงให้ไม่เกิด error dataset ดีคับ
ทำทุกวิธีทางแล้วคับแต่ว่าไม่ได้เลยคับ
|
|
|
|
|
Date :
2012-12-14 12:33:44 |
By :
buildbuilt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|