none
如何將沒有連繫資料庫的datagridview傳入資料庫? RRS feed

  • 一般討論

  •  

    之前沒有想清楚怎麼運作資料存取,結果畫面的功能都寫好了,才再試把資料丟進資料庫,因為我沒有用dataset去做傳送的工具,所以我都直接開兩個資料庫寫入,試了好久大致上可以寫入ACCESS的資料庫,唯一有問題的是如果同一出貨單產品出現二筆時卻出現索引有問題,查了一次確定除了主檔的編號有開索引,明細檔都沒有開索引,然後主檔和明細檔的編號有拉關聯,這是小弟一直覺得奇怪的地方...

    小弟寫進資料庫的方法很土法鍊鋼,是採用直接寫入而不透過dataset,只不過寫起來很麻煩,動不動就要開開關關資料庫,雖然有一個好處就是當我在datagridview上新增好幾筆資料後才一次寫入,減少了新增時的寫入反應時間..

    現在我想問我這樣寫入資料庫的方式可不可靠....

     

     

    Code Snippet

    Dim connStr, insertCmd1, insertCmd2,  As String
                connStr = "Provider=Microsoft.Jet.OLEdb.4.0;Data Source=account.mdb"
                insertCmd1 = "Insert Into DeliveryMaster(DeliveryID,DeliveryDate,AccountReceivable) Values (@DeliveryID,@DeliveryDate,@AccountReceivable)"
                insertCmd2 = "Insert Into DeliveryDetail(ID,deliverySeq,ProductID,Quantity,Unitprice) Values (@ID2,@deliverySeq,@productID,@quantity,@unitPrice)"

                Dim conn As OleDbConnection, cmd1 As OleDbCommand, cmd2 As OleDbCommand
                conn = New OleDbConnection(connStr)
                conn.Open()
                'master database
                cmd1 = New OleDbCommand(insertCmd1, conn)
                cmd1.Parameters.Add(New OleDbParameter("@DeliveryID", OleDbType.Char))
                cmd1.Parameters.Add(New OleDbParameter("@DeliveryDate", OleDbType.DBDate))
                cmd1.Parameters.Add(New OleDbParameter("@AccountReceivable", OleDbType.Integer))
                cmd1.Parameters("@DeliveryID").Value = deliveryID.Text
                cmd1.Parameters("@DeliveryDate").Value = DateTime.Now
                cmd1.Parameters("@AccountReceivable").Value = Val(pay.Text)
                cmd1.ExecuteNonQuery()
                'detail database
                For qq As Integer = 0 To Order_DGV.Rows.Count - 2
                    cmd2 = New OleDbCommand(insertCmd2, conn)
                    cmd2.Parameters.Add(New OleDbParameter("@ID2", OleDbType.Integer))
                    cmd2.Parameters.Add(New OleDbParameter("@deliverySeq", OleDbType.Integer))
                    cmd2.Parameters.Add(New OleDbParameter("@productID", OleDbType.Integer))
                    cmd2.Parameters.Add(New OleDbParameter("@Quantity", OleDbType.Integer))
                    cmd2.Parameters.Add(New OleDbParameter("@unitprice", OleDbType.Integer))
                    cmd2.Parameters("@ID2").Value = Val(newId)
                    cmd2.Parameters("@deliverySeq").Value = Val(qq + 1)
                    cmd2.Parameters("@productID").Value = Val(Order_DGV.Rows(qq).Cells.Item(1).Value)
                    cmd2.Parameters("@Quantity").Value = Val(Order_DGV.Rows(qq).Cells.Item(5).Value)
                    cmd2.Parameters("@unitprice").Value = Val(Order_DGV.Rows(qq).Cells.Item(6).Value)

     

    cmd2.ExecuteNonQuery()
                Next

                conn.Close()

     

     

    小弟對關聯式資料庫的功力不夠深,請教各位高人指點一下,當我只要重複ProductID, 在cmd2.ExecuteNonQuery() 就會出現"您要求變更資料表,由於會對索引、主索引鍵或關聯產生重複的值,所以不會成功。變更欄位的資料或變更那些包含著重複資料的欄位、移除索引或重新定義索引以允許重複索引值,然後再試一次。"的錯誤.....

     

    • 已變更類型 璉璉 2009年11月14日 上午 06:33
    • 已移動 璉璉 2009年11月14日 上午 06:33 (從:Visual Basic)
    2008年2月23日 下午 12:03