ต้องการบันทึกข้อมูลจากใน DataSet ลงฐานข้อมูลแต่ไม่ได้ รบกวนดูโค้ดให้ทีครับ
ตัวอย่างการใช้ DataAdapter
Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
ByVal queryString As String) As DataSet
Using connection As New OleDbConnection(connectionString)
Dim adapter As New OleDbDataAdapter()
adapter.SelectCommand = New OleDbCommand(queryString, connection)
Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)
connection.Open()
Dim customers As DataSet = New DataSet
adapter.Fill(customers)
' Code to modify data in DataSet here
adapter.Update(customers)
Return customers
End Using
End Function
ขาดตัวนี้ไปหรือเปล่า
Code (VB.NET)
connection.Open()
Date :
2010-01-02 16:19:09
By :
tungman
แล้วมันขึ้น Error หรืออะไรหรือเปล่าครับ
และอย่าลืมว่าตัว DataAdapter มันจะยังไม่ปิด Connection จนกว่า ตัว Object จะถูกเรียกคำสั่ง Dispose นะครับ
แต่ถ้าไม่ Error ให้ลอง Check ดังนี้
1. บรรทัดที่ 6 แน่ใจหรือไม่ว่า Table ที่ 0 เป็น Table Customer
2. ลอง Check การนิยมของ Dataset ดูครับว่ามีการ นิยมถูกต้องแล้วหรือเปล่า
Date :
2010-01-03 00:30:39
By :
tempsavedata
ขอบคุณคำแนะนำคับ :)
อ่าดูแล้วรู้สึกปัญหาจะไม่ใช่ตรง Adapter แล้วหละครับ
คือผมไปเช็คแล้วอ่าคับ ค่ามันไม่ยอมเปลี่ยน
คือผมให้หน้านี้เป็นหน้าแก้ไขข้อมูลส่วนตัว
พอหน้านี้โหลดขึ้นมาก็เทียบหาข้อมูลและแสดงใน Textbox ทั้ง 7 ช่อง
สมมติ แก้ไขข้อมูลใน Textbox ที่ 3 พอผมกด save แล้ว ปรากฏว่า Textbox 3 ยังเป็นข้อมูลเดิม
สิ่งที่ผมอยากได้คือหน้านี้พอโหลดมาก็โชว์ข้อมูลของสมาชิกท่านนั้น จากนั้นเราก็สามารถแก้ไขข้อมูลได้
รบกวนขอคำแนะนำด้วยนะครับ
Code (C#)
protected void Page_Load(object sender, EventArgs e)
{
HttpCookie getCookie = Request.Cookies["info"];
CustomerOnly ds = new CustomerOnly();
CustomerTableAdapter dt = new CustomerTableAdapter();
dt.Fill(ds.Customer);
int i = 0;
for (i = 0; i < ds.Customer.Rows.Count; i++)
{
if (ds.Customer.Rows[i][4].ToString() == getCookie.Values["username"])
break;
}
TextBox1.Text = ds.Customer.Rows[i][0].ToString();
TextBox2.Text = ds.Customer.Rows[i][1].ToString();
TextBox3.Text = ds.Customer.Rows[i][2].ToString();
TextBox4.Text = ds.Customer.Rows[i][3].ToString();
TextBox5.Text = ds.Customer.Rows[i][4].ToString();
TextBox6.Text = ds.Customer.Rows[i][5].ToString();
TextBox7.Text = ds.Customer.Rows[i][6].ToString();
TextBox8.Text = ds.Customer.Rows[i][7].ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
CustomerTableAdapter da = new CustomerTableAdapter();
da.Dispose();
loginstepDataContext db = new loginstepDataContext();
HttpCookie getCookie = Request.Cookies["info"];
CustomerOnly ds = new CustomerOnly();
da.Fill(ds.Customer);
TextBox1.
int i = 0;
int h = ds.Customer.Rows.Count;
for (i = 0; i < ds.Customer.Rows.Count; i++)
{
if (ds.Customer.Rows[i][4].ToString() == getCookie.Values["username"])
break;
}
ds.Customer.Rows[i][1] = TextBox2.Text;
ds.Customer.Rows[i][2] = TextBox3.Text;
ds.Customer.Rows[i][3] = TextBox4.Text;
ds.Customer.Rows[i][4] = TextBox5.Text;
ds.Customer.Rows[i][5] = TextBox6.Text;
ds.Customer.Rows[i][7] = TextBox8.Text;
da.Update(ds.Customer);
}
Date :
2010-01-03 05:17:56
By :
nutto54
Code (C#)
protected void Page_Load(object sender, EventArgs e)
{
HttpCookie getCookie = Request.Cookies["info"];
CustomerOnly ds = new CustomerOnly(); // <-- ขอดูโค้ด
CustomerTableAdapter dt = new CustomerTableAdapter(); // <-- ขอดูโค้ด
dt.Fill(ds.Customer);
int i = 0;
//ทำอะไรครับ ใช้ Query แทนได้หรือเปล่า
for (i = 0; i < ds.Customer.Rows.Count; i++)
{
if (ds.Customer.Rows[i][4].ToString() == getCookie.Values["username"])
break;
}
TextBox1.Text = ds.Customer.Rows[i][0].ToString();
TextBox2.Text = ds.Customer.Rows[i][1].ToString();
TextBox3.Text = ds.Customer.Rows[i][2].ToString();
TextBox4.Text = ds.Customer.Rows[i][3].ToString();
TextBox5.Text = ds.Customer.Rows[i][4].ToString();
TextBox6.Text = ds.Customer.Rows[i][5].ToString();
TextBox7.Text = ds.Customer.Rows[i][6].ToString();
TextBox8.Text = ds.Customer.Rows[i][7].ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
CustomerTableAdapter da = new CustomerTableAdapter();
da.Dispose();
loginstepDataContext db = new loginstepDataContext();
HttpCookie getCookie = Request.Cookies["info"];
CustomerOnly ds = new CustomerOnly();
da.Fill(ds.Customer);
TextBox1.
int i = 0;
int h = ds.Customer.Rows.Count;
for (i = 0; i < ds.Customer.Rows.Count; i++)
{
if (ds.Customer.Rows[i][4].ToString() == getCookie.Values["username"])
break;
}
ds.Customer.Rows[i][1] = TextBox2.Text;
ds.Customer.Rows[i][2] = TextBox3.Text;
ds.Customer.Rows[i][3] = TextBox4.Text;
ds.Customer.Rows[i][4] = TextBox5.Text;
ds.Customer.Rows[i][5] = TextBox6.Text;
ds.Customer.Rows[i][7] = TextBox8.Text;
da.Update(ds.Customer);
}
Date :
2010-01-03 10:07:03
By :
tungman
จากที่ดูแล้วแสดงว่าคุณอาจจะยังไม่เข้าใจเรื่องของ Life cycle ของ Page นะครับ Method Page_Load นั้นจะถูกทำเมื่อ IIS ต้องการ Load Page นั้นแสดงว่าก่อนที่เข้า Method Button1_Click มันจะทำ Method Page_Load ก่อนนะครับ ดังนั้น เมื่อ User Key ข้อมูลมามันก็จะถูกเขียนทับภายใน Method Page_Load นี้ ดังนั้น ถ้ายังอยากคง Concept นี้อยู่ก็คงต้องใส่ Code เพิ่มตามนี้ครับ
Code (C#)
protected void Page_Load(object sender, EventArgs e)
{
if(!this.IsPostBack && !this.IsCallback)//บรรทัดเดียวช่วยได้ครับ
{
HttpCookie getCookie = Request.Cookies["info"];
CustomerOnly ds = new CustomerOnly();
CustomerTableAdapter dt = new CustomerTableAdapter();
dt.Fill(ds.Customer);
int i = 0;
for (i = 0; i < ds.Customer.Rows.Count; i++)
{
if (ds.Customer.Rows[i][4].ToString() == getCookie.Values["username"])
break;
}
TextBox1.Text = ds.Customer.Rows[i][0].ToString();
TextBox2.Text = ds.Customer.Rows[i][1].ToString();
TextBox3.Text = ds.Customer.Rows[i][2].ToString();
TextBox4.Text = ds.Customer.Rows[i][3].ToString();
TextBox5.Text = ds.Customer.Rows[i][4].ToString();
TextBox6.Text = ds.Customer.Rows[i][5].ToString();
TextBox7.Text = ds.Customer.Rows[i][6].ToString();
TextBox8.Text = ds.Customer.Rows[i][7].ToString();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
CustomerTableAdapter da = new CustomerTableAdapter();
da.Dispose();
loginstepDataContext db = new loginstepDataContext();
HttpCookie getCookie = Request.Cookies["info"];
CustomerOnly ds = new CustomerOnly();
da.Fill(ds.Customer);
TextBox1.
int i = 0;
int h = ds.Customer.Rows.Count;
for (i = 0; i < ds.Customer.Rows.Count; i++)
{
if (ds.Customer.Rows[i][4].ToString() == getCookie.Values["username"])
break;
}
ds.Customer.Rows[i][1] = TextBox2.Text;
ds.Customer.Rows[i][2] = TextBox3.Text;
ds.Customer.Rows[i][3] = TextBox4.Text;
ds.Customer.Rows[i][4] = TextBox5.Text;
ds.Customer.Rows[i][5] = TextBox6.Text;
ds.Customer.Rows[i][7] = TextBox8.Text;
da.Update(ds.Customer);
}
Date :
2010-01-03 11:47:58
By :
tempsavedata
ขอบคุณมากเลยคับทั้งคุณ tungman และคุณ Peter มากๆนะครับที่ช่วย ^/\^
ได้แล้วครับผม บรรทัดเดียวจิงๆ = =
คือไม่ทราบว่าพอจะอธิบายได้มั้ยอ่าคับ ไม่ค่อยเข้าใจเกี่ยวกับ !ispostback กับ !iscallback นี่อ่ะครับ
ผมลองเปิดเวปอ่านดูอ่ะคับแต่ไม่ค่อยเข้าใจ
มันมีหลักกานทำงานยังไง และจากโค้ดของผมอ่าคับ ไม่ทราบว่าปัจจุบันค่ามันมีการเปลี่ยนแปลงยังไงอ่าคับ
ไม่รู้ว่ามันจาก true เปลี่ยนเป็น false หรือยังไงอ่าคับ อันนี้ผมมั่วนะคับ ><
ถ้าว่างกรุณาแนะนำผมด้วยนะครับ
Date :
2010-01-03 13:08:57
By :
nutto54
มันเป็นเรื่องของ Page life cycle ซึ่งถ้าจะให้อธิบายมันคงยาวมากครับ ถ้าจะเอาอย่างเข้าใจง่าย ๆ และไม่ถูกต้อง 100% แต่ก็สามารถนำไปเขียน Web แบบที่ไม่ Advance ได้
ก็คือเมื่อมีการทำงานในฝั่ง Server มันก็จะเข้ามาทำที่ Method Page_Load ไม่ว่าจะเป็นการ Load ขึ้นมาในครั้งแรก หรือเมื่อมีการ Click ปุ่ม หรือ Event ต่าง ๆ ที่จะกลับมาทำที่ Server ซึ่ง Method นี้ถูกทำก่อน การเรียก Delegate ของ Event ซึ่งการเรียกกลับมาของ Event นี้เมื่อกลับเข้ามาที่ server เราจะเรียกว่า PostBack ครับ
ซึ่งสมมติว่าเราได้มีการใช้ AJAX ของ .net หรือ UpdatePanel แล้วมีเหตุการทำให้ UpdatePanel ทำงานเราจะเรียกว่า CallBack ครับ ซึ่งก็ขอยำอีกที่ว่าทุกเหตุที่ว่ามานี้มันจะต้องผ่าน Method Page_Load เสมอ
ดังนั้นใน Code ที่ผมเพิ่มเข้าไปจึงเป็นการสั่งให้ทำการตรวจสอบว่าเป็นการเรียกมาที่ Server แบบที่ไม่ได้กลับมาเพราะว่าเกิดจากการ Click ปุ่ม Save หรือเกิดจาก UpdatePanel อะไรทำนองนี้ทั้งหมด จึงจะทำการ Set ค่าต่าง ๆ ลง Controls ตาม Code ของคุณต่อไปครับ
Date :
2010-01-03 14:05:18
By :
tempsavedata
ขอบคุณคับคุณ Peter
หล่อมากเลยครับ
Date :
2010-01-03 16:16:23
By :
nutto54
Load balance : Server 01