.NET ช่วยดูให้หน่อยค่ะ INSERT แล้วข้อมูลไม่เข้าฐานข้อมูล
พอดีว่าต้องทำโปรเจ็คอ่ะค่ะ ลองเอาโค้ดตามหนังสือมาดัดแปลง
Code (VB.NET)
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Public Class frmMember
Private data As DataSet
Private curRow, numRows As Integer
Private sql As String
Private command As SqlCommand
Private adapter As SqlDataAdapter
Private bindingSrc As BindingSource
Private connection As SqlConnection
Private Sub UpdateBinding()
txtMemberID.DataBindings.Clear()
txtName.DataBindings.Clear()
txtAddress.DataBindings.Clear()
txtZipCode.DataBindings.Clear()
txtIdcardNo.DataBindings.Clear()
txtEmail.DataBindings.Clear()
txtPhone.DataBindings.Clear()
txtAge.DataBindings.Clear()
cbGender.DataBindings.Clear()
cbProvince.DataBindings.Clear()
cbStatus.DataBindings.Clear()
cbOccupation.DataBindings.Clear()
dtBirthday.DataBindings.Clear()
dtMemberIn.DataBindings.Clear()
dtMemberOut.DataBindings.Clear()
sql = "SELECT * FROM Member"
command = New SqlCommand(sql, connection)
adapter = New SqlDataAdapter(command)
data = New DataSet()
adapter.Fill(data, "Member")
bindingSrc = New BindingSource()
bindingSrc.DataSource = data.Tables("Member")
lbMemberList.DataSource = data.Tables("Member")
lbMemberList.DisplayMember = "Member_Name"
numRows = data.Tables("Member").Rows.Count
txtMemberID.DataBindings.Add("Text", bindingSrc, "Member_ID")
txtName.DataBindings.Add("Text", bindingSrc, "Member_Name")
cbOccupation.DataBindings.Add("Text", bindingSrc, "Member_Occupation")
txtIdcardNo.DataBindings.Add("Text", bindingSrc, "Member_IDcard")
cbStatus.DataBindings.Add("Text", bindingSrc, "Member_Marital_Status")
dtMemberIn.DataBindings.Add("Value", bindingSrc, "Apply_Date")
cbGender.DataBindings.Add("Text", bindingSrc, "Member_Gender")
txtAddress.DataBindings.Add("Text", bindingSrc, "Member_Address")
cbProvince.DataBindings.Add("Text", bindingSrc, "Member_Province")
txtZipCode.DataBindings.Add("Text", bindingSrc, "Member_Zipcode")
txtPhone.DataBindings.Add("Text", bindingSrc, "Member_Phone")
dtBirthday.DataBindings.Add("Value", bindingSrc, "Member_Birthday")
txtEmail.DataBindings.Add("Text", bindingSrc, "Member_Email")
End Sub
Function chkDBNull(ByVal strString As Object) As String
If IsDBNull(strString) Then
Return ""
Else
Return (strString.ToString())
End If
End Function
Public Sub frmMember_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Refresh()
Dim conStr As String = "Data Source=.\SQLEXPRESS;" & _
"AttachDbFilename=|DataDirectory|\StoryBrooke.mdf;" & _
"Integrated Security=True;User Instance=True"
connection = New SqlConnection(conStr)
If connection.State = ConnectionState.Closed Then
connection.Open()
End If
ShowIcon = False
btnSave.Enabled = False
UpdateBinding()
End Sub
Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
Me.Close()
End Sub
Private Sub btnNewMember_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNewMember.Click
If btnNewMember.Text = "สมัครสมาชิกใหม่" Then
btnNewMember.Text = "ยกเลิก"
btnSave.Enabled = True
lbMemberList.Enabled = False
txtMemberID.Text = ""
txtName.Text = ""
txtIdcardNo.Text = ""
txtAddress.Text = ""
txtZipCode.Text = ""
txtPhone.Text = ""
txtEmail.Text = ""
txtAge.Text = ""
dtBirthday.Value = Now
dtMemberIn.Value = Now
dtMemberIn.Enabled = False
dtMemberOut.Value = Now.AddYears(1)
dtMemberOut.Enabled = False
cbOccupation.SelectedIndex = -1
cbStatus.SelectedIndex = -1
cbGender.SelectedIndex = -1
cbProvince.SelectedIndex = -1
tsStatus.Text = "สมาชิกลำดับที่: " & (bindingSrc.Count + 1) & "/" & (bindingSrc.Count + 1)
Else
btnNewMember.Text = "สมัครสมาชิกใหม่"
btnSave.Enabled = False
lbMemberList.Enabled = True
dtMemberIn.Enabled = True
dtMemberOut.Enabled = True
UpdateBinding()
End If
End Sub
Private Sub btnEditMember_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEditMember.Click
btnEditMember.Enabled = False
btnSave.Enabled = True
End Sub
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
sql = "INSERT INTO Member"
If Not (txtEmail.Text Is Nothing) Then
sql &= "(Member_ID, Member_Name, Member_IDcard, Member_Address, Member_Province, Member_Zipcode, Member_Gender, Member_Marital_Status, Member_Birthday, Member_Occupation, Member_Phone, Member_Email, Apply_Date)"
sql &= "VALUES(@ID, @Name, @IDcard, @Address, @Province, @Zipcode, @Gender, @Marital, @Birthday, @Occupation, @Phone, @Email, @Apply)"
Else
sql &= "(Member_ID, Member_Name, Member_IDcard, Member_Address, Member_Province, Member_Zipcode, Member_Gender, Member_Marital_Status, Member_Birthday, Member_Occupation, Member_Phone, Apply_Date)"
sql &= "VALUES(@ID, @Name, @IDcard, @Address, @Province, @Zipcode, @Gender, @Marital, @Birthday, @Occupation, @Phone, @Apply)"
End If
AddParameters(sql)
Dim result As Integer = command.ExecuteNonQuery()
If result = -1 Then
MessageBox.Show("เกิดข้อผิดพลาด ไม่สามาถเพิ่มหรือบันทึกข้อมูลได้")
Else
MessageBox.Show("ระบบทำการบันทึกข้อมูลเรียบร้อยแล้ว")
btnNewMember.PerformClick()
End If
End Sub
Private Sub frmMember_FormClosing() Handles MyBase.FormClosing
connection.Close()
End Sub
Private Sub AddParameters(ByVal sql As String)
command.Parameters.Clear()
command.CommandText = sql
command.Parameters.AddWithValue("ID", txtMemberID.Text)
command.Parameters.AddWithValue("Name", txtName.Text)
command.Parameters.AddWithValue("IDcard", txtIdcardNo.Text)
command.Parameters.AddWithValue("Address", txtAddress.Text)
command.Parameters.AddWithValue("Province", cbProvince.Text)
command.Parameters.AddWithValue("Zipcode", txtZipCode.Text)
command.Parameters.AddWithValue("Gender", cbGender.Text)
command.Parameters.AddWithValue("Marital", cbStatus.Text)
command.Parameters.AddWithValue("Birthday", dtBirthday.Value)
command.Parameters.AddWithValue("Occupation", cbOccupation.Text)
command.Parameters.AddWithValue("Phone", txtPhone.Text)
command.Parameters.AddWithValue("Email", txtEmail.Text)
command.Parameters.AddWithValue("Apply", dtMemberIn.Value)
End Sub
Private Sub btnFind_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMemberFind.Click
frmMemberFind.Show()
Me.Enabled = False
End Sub
Private Sub lbMemberList_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbMemberList.SelectedIndexChanged
bindingSrc.Position = lbMemberList.SelectedIndex
txtAge.Text = chkDBNull(DateDiff(DateInterval.Year, dtBirthday.Value.Date, Date.Now))
dtMemberOut.Value = chkDBNull(dtMemberIn.Value.AddYears(1))
tsStatus.Text = "สมาชิกลำดับที่: " & (bindingSrc.Position + 1) & "/" & bindingSrc.Count
End Sub
Private Sub btnDelMember_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelMember.Click
End Sub
End Class
มันสามารถกรอกข้อมูลแล้วก็บันทึกได้ แต่พอเปิดรันใหม่อีกรอบ กลับไม่มีข้อมูลนั้น
ไปดูในฐานข้อมูลก็ไม่มีค่ะTag : .NET, Ms SQL Server 2005, VS 2010 (.NET 4.x)
ประวัติการแก้ไข 2012-03-06 16:25:25 2012-03-06 16:34:19 2012-03-06 17:08:10 2012-03-06 17:51:39 2012-03-06 17:55:36 2012-03-06 18:34:53 2012-03-06 18:35:49
Date :
2012-03-06 15:16:37
By :
itsmedesign
View :
1820
Reply :
8
มันน่าจะไปอยู่ในโฟเดอร์ Debug ครับ คือพอเรากด Debug ใหม่ มันก็จะ Build ตัว Source ไปไว้ในโฟเดอร์ Debug และทำการเรียก Database ตัวนั้นแทนครับ (อันนี้เคยเจอ Database Access)
Date :
2012-03-07 07:08:47
By :
webmaster
แล้วแบบนี้ต้องแก้หรือว่าทำยังไงอ่ะคะ
Date :
2012-03-08 16:22:58
By :
itsmedesign
ถ้ากรณีที่คุณได้ Import ฐานข้อมูลไว้ใน Project ของคุณนะครับ
1. เปิดหน้าต่าง Solution Explorer กับหน้าต่าง Properties ขึ้นมา
2. ในหน้าต่าง Solution Explorer คลิกที่ชื่อไฟล์ฐานข้อมูลของคุณ StoryBrooke.mdf
3. เปลี่ยนค่า Properties ในหน้าต่าง Properties ชื่อว่า Build Action = Content และ ชื่อว่า Copy to Output Directory=Do not copy
แค่นี้ก็เรียบร้อยครับ
ส่วนถ้ามีการเปลี่ยนแปลงฐานข้อมูล คือคุณอาจจะแก้ไขตารางในฐานข้อมูล ก็ต้องมาเปลี่ยน Copy to Output Directory=Copy if newer ด้วย
แต่ว่าข้อมูลในฐานข้อมูลเก่าจะหายไปเหมือนเดิมนะครับ เมื่ออัปเดทฐานข้อมูลแล้วก็กำหนดคืนเหมือนเดิมครับ
หากไม่ตรงประเด็น ขออภัยด้วย
Date :
2012-03-09 15:46:25
By :
kosin_man
แก้ได้แล้วค่ะ เปลี่ยนการคอนเนคไปที่ฐานข้อมูลแทนการ attach ไฟล์
Dim conStr As String = "Data Source=.\SQLEXPRESS;" & _
073."AttachDbFilename=|DataDirectory| \StoryBrooke.mdf;" & _
074."Integrated Security=True;User Instance=True"
เปลี่ยนเป็น path ของไฟล์ .mdf ที่อยู่ในเครื่องแทน :)
Date :
2012-03-10 00:15:56
By :
itsmedesign
มันน่าจะไปอยู่ในโฟเดอร์ Debug ครับ คือพอเรากด Debug ใหม่ มันก็จะ Build ตัว Source ไปไว้ในโฟเดอร์ Debug และทำการเรียก Database ตัวนั้นแทนครับ (อันนี้เคยเจอ Database Access)
ถ้าเป็นแบบ นี้จะแก้ยังไงคะ
Date :
2012-08-22 15:22:57
By :
nnn
Load balance : Server 03