none
從一個修正過的DataSet更新資料庫 RRS feed

  • 問題

  • 作業系統 server 2003
    語言 vb.net
    資料庫 mysql
    錯誤訊息:
    將物件參考設定為物件的執行個體

    程式碼
        Dim objDS As New DataSet()
    
        Dim objCB As MySqlCommandBuilder
    
    
    
        Dim objDT As DataTable
    
    
    
        '郵件
    
        Dim mailclien As New SmtpClient
    
        Dim MailReceiver As String
    
        Dim msg As New MailMessage
    
        '計數器
    
        Dim t As Integer
    
        '客戶屬性
    
        Dim WhoNeededm As String = "select * from customer where Neededm='Y';select * from edm"
    
    
    
        Private Sub Coparrtmail_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            mailclien.Host = SmtpSrv
    
            mailclien.Port = SmtpPort
    
        End Sub
    
    
    
    
    
        Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
    
            Dim objConn As MySqlConnection
    
            Dim objDA As MySqlDataAdapter
    
    
    
            objConn = New MySqlConnection("server=192.168.1.150;port=3306;user id=****; password=********; database=******; pooling=false")
    
            objDA = New MySqlDataAdapter(WhoNeededm, objConn)
    
            Dim objDR As DataRow
    
            objDA.Fill(objDS)
    
            objDS.Tables(0).TableName = "MailAddress"
    
            objDS.Tables(1).TableName = "Edmname"
    
    
    
            Label1.Text = objDS.Tables(1).Rows(0)(2)
    
    
    
    
    
            objDR = objDS.Tables("Edmname").NewRow
    
            objDR("edmName") = lbTitle.ToString
    
            objDR("SendDate") = "2009-06-22"
    
            objDS.Tables("Edmname").Rows.Add(objDR)
    
    
    
            objCB = New MySqlCommandBuilder(objDA)
    
            objDA.Update(objDS, "Edmname")
    
    
    
        End Sub
    
    <br/><br/>
    
    
    錯誤訊息出現在
    objDA.Update(objDS, "Edmname")
    這一行

    我是參考書上的範例寫的
    希望新增一筆資料在dataset  然後更新到資料庫
    不太清楚錯的原因  每個物件我都有new 出來呀
    上網也找不到解決方法
    不知該怎麼辨

    只是普通的宅宅
    2009年6月22日 上午 10:29

解答

  • 還是不行

    objDA.Update(objDS.Tables(1))
    出現錯誤訊息:
    並未將物件參考設定為物件的執行個體




    只是普通的宅宅

    那應該就是好說大說的那樣 , Table(1)沒有對應的 table存在.


    微軟技術支援中心(CSS) - http://www.dotblogs.com.tw/lolota/
    • 已標示為解答 R.R 2009年6月23日 上午 07:45
    2009年6月23日 上午 05:44
  • Dim objDS As New DataSet()

        Dim objCB As MySqlCommandBuilder



        Dim objDT As DataTable



        '郵件

        Dim mailclien As New SmtpClient

        Dim MailReceiver As String

        Dim msg As New MailMessage

        '計數器

        Dim t As Integer

        '客戶屬性



        Private Sub Coparrtmail_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            mailclien.Host = SmtpSrv

            mailclien.Port = SmtpPort

        End Sub

        Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click

            Dim objConn As MySqlConnection

            Dim objDA As MySqlDataAdapter



            objConn = New MySqlConnection("server=192.168.1.150;port=3306;user id=****; password=********; database=******; pooling=false")

            objDA = New MySqlDataAdapter("select * from customer where Neededm='Y'", objConn)
    objDB = New MySqlDataAdapter("select * from edm", objConn)

            Dim objDR As DataRow

            objDA.Fill(objDS,"MailAddress");
            objDB.Fill(objDS,"Edmname");

            Label1.Text = objDS.Tables("Edmname").Rows(0)("ColumnNameC")

            objDS.Tables("Edmname").Rows.Add(objDR)



            objCB = New MySqlCommandBuilder(objDA)

            objDB.Update(objDS, "Edmname")


        End Sub


    //上面是我用C#改你VB改成四不像的.第一個程式簡化,不要將SqlCommand方在一起.第二個不要用索引去指派值.或許對小程式沒差.但要寫大系統,就差很多.
    • 已標示為解答 R.R 2009年6月23日 上午 07:45
    2009年6月23日 上午 05:51

所有回覆

  • Hi,

    資料表有設定PK嗎?
    微軟技術支援中心(CSS) - http://www.dotblogs.com.tw/lolota/
    2009年6月23日 上午 02:34
  • 原本的資料表有設pk
    dataset裡面的資料表會有pk嗎 ?
    objDS.Tables(1).Rows(0)(0)
    就是pk值


    如果要重新設定,要怎麼設呢?
    只是普通的宅宅
    2009年6月23日 上午 03:38
  • 我只是要問說資料表有沒有PK, 既然有就OK了.

    如果您程式改成 objDA.Update(objDS.Tables(1))  這樣可行嗎?

    微軟技術支援中心(CSS) - http://www.dotblogs.com.tw/lolota/
    2009年6月23日 上午 05:13
  • 這種問題問了很多次了.就是"將物件參考設定為物件的執行個體",這麼簡單
    怎麼解?就是用單步執行去看.
    為什麼會產生?就是習慣問題.大家喜歡用Tables(1)方式.你認為這個一定有值嗎?
    另外SqlCommand的命令分二個寫.有的資料庫不一定能接受傳一串指令,又能很聰明的塞回Tables(0)跟Tables(1).

    2009年6月23日 上午 05:41
  • 還是不行

    objDA.Update(objDS.Tables(1))
    出現錯誤訊息:
    並未將物件參考設定為物件的執行個體




    只是普通的宅宅
    2009年6月23日 上午 05:43
  • 還是不行

    objDA.Update(objDS.Tables(1))
    出現錯誤訊息:
    並未將物件參考設定為物件的執行個體




    只是普通的宅宅

    那應該就是好說大說的那樣 , Table(1)沒有對應的 table存在.


    微軟技術支援中心(CSS) - http://www.dotblogs.com.tw/lolota/
    • 已標示為解答 R.R 2009年6月23日 上午 07:45
    2009年6月23日 上午 05:44
  • Dim objDS As New DataSet()

        Dim objCB As MySqlCommandBuilder



        Dim objDT As DataTable



        '郵件

        Dim mailclien As New SmtpClient

        Dim MailReceiver As String

        Dim msg As New MailMessage

        '計數器

        Dim t As Integer

        '客戶屬性



        Private Sub Coparrtmail_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            mailclien.Host = SmtpSrv

            mailclien.Port = SmtpPort

        End Sub

        Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click

            Dim objConn As MySqlConnection

            Dim objDA As MySqlDataAdapter



            objConn = New MySqlConnection("server=192.168.1.150;port=3306;user id=****; password=********; database=******; pooling=false")

            objDA = New MySqlDataAdapter("select * from customer where Neededm='Y'", objConn)
    objDB = New MySqlDataAdapter("select * from edm", objConn)

            Dim objDR As DataRow

            objDA.Fill(objDS,"MailAddress");
            objDB.Fill(objDS,"Edmname");

            Label1.Text = objDS.Tables("Edmname").Rows(0)("ColumnNameC")

            objDS.Tables("Edmname").Rows.Add(objDR)



            objCB = New MySqlCommandBuilder(objDA)

            objDB.Update(objDS, "Edmname")


        End Sub


    //上面是我用C#改你VB改成四不像的.第一個程式簡化,不要將SqlCommand方在一起.第二個不要用索引去指派值.或許對小程式沒差.但要寫大系統,就差很多.
    • 已標示為解答 R.R 2009年6月23日 上午 07:45
    2009年6月23日 上午 05:51