วิธีบันทึกข้อมูลที่ป้อนใน DataGrid ไปยังฐานข้อมูล SQL

แนวคิดระบบของฉันคือสิ่งนี้ ฉันแสดงคอลัมน์จากตารางต่างๆ เสร็จแล้วโดยใช้การรวมภายใน

ฉันเจอช่วงเวลาที่ยากลำบากเพราะฉันคิดว่าคุณสามารถใช้คำสั่ง insert ใน sql ทีละตารางได้เท่านั้น

แต่ DataGrid ของฉันแสดงคอลัมน์ต่าง ๆ ที่ถูกเรียกจากตารางอื่น

โครงสร้างของไวยากรณ์ sql ของฉันจะเป็นอย่างไร? และยังเรียก Stored Procedure บน vb.net 2003 อีกด้วย

ขอบคุณความคิดใด ๆ ทุกคน

นี่คือ PROC ที่จัดเก็บ SQL ของฉัน

CREATE PROCEDURE AddToOfficeEquipmentProfile AS

INSERT INTO dbo.tblOfficeEquipmentProfile(OE_ID
                                        , Report_ID
                                        , OE_Category
                                        , OE_SubCategory
                                        , OE_Name
                                        , OE_User
                                        , OE_Brand
                                        , OE_Model
                                        , OE_Specs
                                        , OE_SerialNo
                                        , OE_PropertyNo
                                        , OE_Static_IP
                                        , OE_Vendor
                                        , OE_PurchaseDate
                                        , OE_WarrantyInclusiveYear
                                        , OE_WarrantyStatus
                                        , OE_Status
                                        , OE_Dept_Code
                                        , OE_Location_Code
                                        , OE_Remarks)
VALUES
  (DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT)
GO

นี่คือรหัส VB ​​ของฉัน

Dim sqlconn As New SqlClient.SqlConnection
    sqlconn.ConnectionString = "server = SKPI-APPS1;" & _
    "Database = EOEMS;integrated security=true"

    Dim Command As SqlCommand = New SqlCommand
    Command.Connection = sqlconn
    Command.CommandText = "AddToOfficeEquipmentProfile"
    Command.CommandType = CommandType.StoredProcedure

    Dim sAdapter As SqlDataAdapter = New SqlDataAdapter(Command)
    Dim DataSet As DataSet = New DataSet(Command.CommandText)

    sAdapter.Fill(DataSet)
    DataGrid1.DataSource = DataSet.Tables(0)
    MsgBox(MsgBoxStyle.OKOnly, "YOU HAVE SUCCESSFULLY ADDED RECORDS TO THE TABLE")

มันส่งคืนข้อผิดพลาดที่ชี้ไปที่

 sAdapter.Fill(DataSet)

นี่คือรหัสที่สองของฉันด้านล่างโดยไม่ต้องมีขั้นตอนการจัดเก็บ

    Dim adapter As New SqlDataAdapter
    Dim sql As String


    sql = "INSERT INTO tblOfficeEquipmentProfile(OE_ID, Report_ID, OE_Category, OE_SubCategory, OE_Name, OE_User, OE_Brand, OE_Model, OE_Specs, OE_SerialNo, OE_PropertyNo, OE_Static_IP, OE_Vendor, OE_PurchaseDate, OE_WarrantyInclusiveYear, OE_WarrantyStatus, OE_Status, OE_Dept_Code, OE_Location_Code, OE_Remarks)VALUES(DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT)"
    Try
        sqlconn.Open()
        adapter.InsertCommand = New SqlCommand(sql, sqlconn)
        adapter.InsertCommand.ExecuteNonQuery()
        MsgBox("Row inserted !! ")
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

แต่ก็ยังไม่ทำงาน


person ivandinglasan    schedule 19.03.2013    source แหล่งที่มา
comment
@joshua [รหัส] INSERT INTO Persons VALUES (4, 'Nilsen', 'Johan', 'Bakken 2', 'Stavanger') [/ code]   -  person ivandinglasan    schedule 19.03.2013
comment
โปรดเพิ่มสิ่งนี้ในคำถามของคุณและคุณแทรกลงใน Table เพียงอันเดียวเท่านั้น?   -  person joshua    schedule 19.03.2013
comment
นั่นคือโค้ดตัวอย่างสำหรับการแทรกบันทึกลงในตาราง.. แต่สิ่งที่ฉันรู้ก็คือคุณสามารถแทรกบันทึกได้ครั้งละหนึ่งตารางเท่านั้น.. แต่สิ่งที่ฉันต้องการคือการแทรกในตารางที่แตกต่างกันในเวลาเดียวกัน เพราะฉันเรียกคอลัมน์ในตารางที่แตกต่างกันพร้อมกันเพื่อแสดงบน DataGrid   -  person ivandinglasan    schedule 19.03.2013
comment
จากนั้นคุณเพียงแค่เพิ่มโค้ด INSERT หลายอันแล้วดำเนินการในแต่ละครั้ง   -  person Kasnady    schedule 19.03.2013
comment
@ArwinZhang ท่านถ้ามันง่ายขนาดนั้น ฉันจะไม่ถามคำถามเลย แต่ขอบคุณสำหรับคำแนะนำของคุณ   -  person ivandinglasan    schedule 19.03.2013
comment
@ivandinglasan มันง่ายเหมือนที่ฉันพูด ฉันเคยลองด้วยตัวเองมาก่อน รหัสจะยาวแน่นอนขึ้นอยู่กับสิ่งที่คุณต้องการ ลองก่อนแล้วบอกว่าเกิดข้อผิดพลาดอะไรอีกครั้ง   -  person Kasnady    schedule 19.03.2013
comment
@ArwinZhang ท่านนี่คือรหัสของฉัน โปรดช่วยฉันแก้ไขเพื่อให้มันใช้งานได้   -  person ivandinglasan    schedule 20.03.2013


คำตอบ (1)


รหัสของคุณยาวมากและโดยที่ฉันหมายถึงคือ ..

 Try
                    con = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\notifdb.accdb")
                    Dim command As String
                    command = "INSERT INTO NFTB (NOTIF, EMP_NO, EMP_NAME, [POSITION]) VALUES (@NOTIF, @EMP_NO, @EMP_NAME, @POSITION)"
                    con.Open()
                    Dim cmd As OleDbCommand
                    cmd = New OleDbCommand(command, con)
                    cmd.Parameters.AddWithValue("@NOTIF", NOTIFTextBox.Text)
                    cmd.Parameters.AddWithValue("@EMP_NO", EMP_NOTextBox.Text)
                    cmd.Parameters.AddWithValue("@EMP_NAME", EMP_NAMETextBox.Text)
                    cmd.Parameters.AddWithValue("@POSITION", POSITIONTextBox.Text)
                    cmd.ExecuteNonQuery()
                Catch exceptionObject As Exception
                    MessageBox.Show(exceptionObject.Message)
                Finally
                    con.Close()
                End Try

ฉันเพิ่งพูดถึงโค้ดแทรก นอกจากนั้นคุณต้องทำเอง และ SQL ไม่เคยมีค่า DEFAULT คุณต้องเปลี่ยนค่าของชื่อคอลัมน์ของคุณเป็นค่าบางอย่าง จากนั้นเพิ่มพารามิเตอร์ลงไปว่ากล่องข้อความหรือฟิลด์ใดในแบบฟอร์มของคุณที่จะป้อนเข้าสู่ฐานข้อมูลของคุณ

person Kasnady    schedule 20.03.2013
comment
ฉันรู้ว่าต้องทำด้วยตัวเอง ฉันแค่ถามความคิดเห็นว่าจะแก้ไขอย่างไร ฉันหมายถึงว่าโครงสร้างโค้ดจะเป็นอย่างไร ฉันจะลองใช้รหัสของคุณ ขอบคุณมาก ฉันจะทำเครื่องหมายว่าถูกต้องเมื่อใช้งานได้ - person ivandinglasan; 20.03.2013
comment
ฉันแทนที่ cmd = ...... ด้วยไวยากรณ์ sql ของฉัน แต่ ข้อผิดพลาดคือขีดเส้นใต้ด้วยเส้นสีน้ำเงินที่ระบุว่าประเภทค่าของ 'สตริง' ไม่สามารถแปลงเป็น... - person ivandinglasan; 20.03.2013
comment
โดยมีหรือไม่มีการขีดเส้นใต้ด้วยเส้นสีน้ำเงิน.. cmd = INSERT INTO tblOfficeEquipmentProfile(OE_ID, Report_ID, OE_Category, OE_SubCategory, OE_Name, OE_User, OE_Brand, OE_Model, OE_Specs, OE_SerialNo, OE_PropertyNo, OE_Static_IP, OE_Vendor, OE_PurchaseD กิน, OE_WarrantyIncludeYear, OE_WarrantyStatus, OE_Status , OE_Dept_Code, OE_Location_Code, OE_Remarks) ค่า (ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น, ค่าเริ่มต้น) - person ivandinglasan; 20.03.2013
comment
เหตุใดค่าของคุณจึงมีค่าเริ่มต้น นอกจากนี้ ค่าและคอลัมน์ คุณเพียงแค่เขียนว่าคุณต้องการแทรกคอลัมน์ใด ไม่จำเป็นต้องทั้งหมด... - person Kasnady; 20.03.2013
comment
ฉันไม่เห็นสิ่งผิดปกติในการแทรกลงในชื่อตารางของฉัน (ชื่อคอลัมน์,... ฯลฯ... ฉันคิดว่าปัญหาของฉันคือค่าเริ่มต้น ใช่แล้ว สิทธิ์ของคุณ.. แต่ถ้าไม่ใช่ค่าเริ่มต้น ฉันจะบันทึกข้อมูลที่ป้อนใน DataGrid ของฉันและได้อย่างไร บันทึกลงในเซิร์ฟเวอร์ sql ของฉันเหรอ? - person ivandinglasan; 20.03.2013
comment
ดูคำตอบ. ฉันมีการเปลี่ยนแปลงในการบันทึกโค้ด คุณเพียงแค่ต้องทำซ้ำการแทรกและพารามิเตอร์ vavlue - person Kasnady; 20.03.2013
comment
ฉันเริ่มเข้าใจสิ่งที่คุณหมายถึงครับ อันสุดท้าย ไม่ใช่ช่องข้อความ มันเป็น datagrid เหรอ? สมมติว่าตำแหน่งนี้อยู่ในคอลัมน์ 1 แถว 1 ฉันจะใส่โค้ดอะไรสำหรับ POSITIONTextBox.Text [code] cmd.Parameters.AddWithValue(@POSITION, POSITIONTextBox.Text)[/code] - person ivandinglasan; 20.03.2013
comment
ลองตรวจสอบที่นี่ stackoverflow.com/questions/9784301/ - person Kasnady; 20.03.2013