none
XML檔案如何將裡面的資料轉入資料庫的某Table中??? RRS feed

  • 問題

  • 如題~
    目前有一個  XML檔案  透過VB.NET或ASP.NET來作業   要將這檔案中的資料填入  資料庫的Table中,
    想請教前輩先進有什麼解決方式嗎? 謝謝!

    目前是用以下這方法將.XML檔案讀出到DataSet中
    DataSet2.ReadXml("C:\TEST2.XML")

    接著~問題來ㄌ...
    不知如何將資料寫入到資料庫中...

    我試過用一般資料庫的Select、Insert、Update..的用法
    會出現以下錯誤訊息:
    出錯在這行:cmd.ExecuteNonQuery()
    錯誤提示為:ORA-00936: 遺漏表示式


    [我的作業環境]
    作業系統版本-Windows XPP
    開發工具版本-Visual Studio 2008(VB)
    開發環境-Windows Form or Web Form 都可
    資料庫Oracle 9i及10g
    2009年6月8日 上午 09:20

解答

  • 很久沒用ADO.NET的純寫法了.
    但感覺你們都沒搞通就寫.
    DataSet 怎麼會去配到cmd.ExecuteNonQuery()??
    cmd.ExecuteNonQuery() 通常配合 DataReader,或者你自己下SqlCommand 配合如迴圈...一次一個Record去寫回,或下一些特殊的指令.
    而就DataSet 你只要資料庫的結構跟XML相符合.你將DataTable 將 資料庫的Table 撈出,不要帶資料的Schema.
    然後讀XML資料讀入DataTable 中然後 dataSet.Update()就行了.
    而如果結構不同,你要去修正DataTable的結構.
    並改變 DataTable中的 SelectCommand,InsertCommand....去跟Database的Table作對應.
    • 已標示為解答 Lolota Lee 2009年6月12日 上午 09:48
    2009年6月10日 上午 12:32
  • 請參考MSDN中ADO.NET的說明:
    http://msdn.microsoft.com/zh-tw/library/h43ks021(VS.80).aspx


    微軟技術支援中心(CSS) - http://www.dotblogs.com.tw/lolota/
    • 已標示為解答 Lolota Lee 2009年6月12日 上午 09:48
    2009年6月11日 上午 07:07

所有回覆

  • 我想你必須要自己寫SQL語法去更新table,例如"Update xxx Set xxx = @param"之類的(這是MS SQL,Oracle我不瞭解),你可以寫在你的應用程式裡面或是放在stored procedures。

    這個應該是ADO.Net的範疇,和Win form無關吧?
    2009年6月9日 下午 02:33
  • 很久沒用ADO.NET的純寫法了.
    但感覺你們都沒搞通就寫.
    DataSet 怎麼會去配到cmd.ExecuteNonQuery()??
    cmd.ExecuteNonQuery() 通常配合 DataReader,或者你自己下SqlCommand 配合如迴圈...一次一個Record去寫回,或下一些特殊的指令.
    而就DataSet 你只要資料庫的結構跟XML相符合.你將DataTable 將 資料庫的Table 撈出,不要帶資料的Schema.
    然後讀XML資料讀入DataTable 中然後 dataSet.Update()就行了.
    而如果結構不同,你要去修正DataTable的結構.
    並改變 DataTable中的 SelectCommand,InsertCommand....去跟Database的Table作對應.
    • 已標示為解答 Lolota Lee 2009年6月12日 上午 09:48
    2009年6月10日 上午 12:32
  • 請參考MSDN中ADO.NET的說明:
    http://msdn.microsoft.com/zh-tw/library/h43ks021(VS.80).aspx


    微軟技術支援中心(CSS) - http://www.dotblogs.com.tw/lolota/
    • 已標示為解答 Lolota Lee 2009年6月12日 上午 09:48
    2009年6月11日 上午 07:07
  • 先謝謝  好說、Lolota Lee的說明與引導,
    上週一已經搞出來ㄌ..
    用最單純的方式將各欄位列出再更新到資料庫,成功之後..
    接著試著用迴圈測試更新到資料庫...成功.
    最後用迴圈讀取欄位並將各欄位值更新到資料庫..也成功了!

    在MS-SQL中可以使用 id=@id
    但在Oracle中 不能用這方式,在MSDN查到這方式 http://msdn.microsoft.com/zh-tw/library/system.data.oracleclient.oracledataadapter.insertcommand(VS.80).aspx
    id=:pid
    不過還沒試成功,不知是否什麼地方意會錯誤 lll<
    2009年6月22日 上午 02:53
  • 寫法post上來看看.

    問題有可能出在
    1. Oracle Client有安裝嗎?
    2. ex: 參數給法

    OracleCommand Cmmd = new OracleCommand("SELECT * form table1 A WHERE A.EQPID=:EQPID AND A.CHANGE_TIME<=:ENDDATE ORDER BY A.CHANGE_TIME", Conn);
    
    
    Cmmd.Parameters.Add(":EQPID", OracleType.Char, 10).Value = "XXX";
    
    Cmmd.Parameters.Add(":ENDDATE", OracleType.DateTime, 7).Value = "2009/07";

    微軟技術支援中心(CSS) - http://www.dotblogs.com.tw/lolota/
    2009年6月22日 上午 03:02
  • 1. Oracle Client有安裝嗎? ==> 有
    2. ex: 參數給法==> 如下,我寫在副程式中
    Sub 指令回傳(ByRef SDA As OracleDataAdapter, ByVal 資料表名稱 As String)
        Dim SqlConnection1 As New System.Data.OracleClient.OracleConnection
            SqlConnection1.ConnectionString = Scn()
            Dim DataSet2 As New DataSet
            SQL = "SELECT * FROM " & 資料表名稱 & " WHERE 1=2"
            SDA = New OracleDataAdapter(SQL, SqlConnection1)
            SDA.Fill(DataSet2, "Table1")
    
            'SqlInsertCommand1
            Dim SInsertC As System.Data.OracleClient.OracleCommand
            SInsertC = New System.Data.OracleClient.OracleCommand
            Dim SInsert As String
            SInsert = "INSERT INTO " & 資料表名稱 & "("
            For i As Integer = 0 To DataSet2.Tables("Table1").Columns.Count - 1
                If i <> DataSet2.Tables("Table1").Columns.Count - 1 Then
                    SInsert &= CStr(DataSet2.Tables("Table1").Columns(i).ColumnName) & ", "
                Else
                    SInsert &= CStr(DataSet2.Tables("Table1").Columns(i).ColumnName) & ") VALUES ("
                End If
            Next
            For i As Integer = 0 To DataSet2.Tables("Table1").Columns.Count - 1
                If i <> DataSet2.Tables("Table1").Columns.Count - 1 Then
                    SInsert &= ":p" & CStr(DataSet2.Tables("Table1").Columns(i).ColumnName) & ", "
                Else
                    SInsert &= ":p" & CStr(DataSet2.Tables("Table1").Columns(i).ColumnName) & "); SELECT "
                End If
            Next
    
            For i As Integer = 0 To DataSet2.Tables("Table1").Columns.Count - 1
                If i <> DataSet2.Tables("Table1").Columns.Count - 1 Then
                    SInsert &= CStr(DataSet2.Tables("Table1").Columns(i).ColumnName) & ", "
                Else
                    SInsert &= CStr(DataSet2.Tables("Table1").Columns(i).ColumnName) & " FROM " & 資料表名稱 & " WHERE 1=1 "
                End If
            Next
            myText1 = SInsert.ToString  'for test info.
    
    
            SInsertC.Connection = SqlConnection1
            For i As Integer = 0 To DataSet2.Tables("Table1").Columns.Count - 1
                SInsertC.Parameters.Add(New System.Data.OracleClient.OracleParameter("p" & CStr(DataSet2.Tables("Table1").Columns(i).ColumnName), System.Data.OracleClient.OracleType.NVarChar, 255, CStr(DataSet2.Tables("Table1").Columns(i).ColumnName)))
            Next
    
            SDA.InsertCommand = SInsertC
            SDA.InsertCommand.CommandText = SInsert
    End Sub

    執行 oSqlDataAdapter1.Update(DataSet2.Tables("XML端")) 後出現 ORA-00911: 字元無效
    2009年6月23日 上午 03:22
  • 這沒有解嗎??? >"<
    2009年7月7日 上午 06:21
  • 您這個要先確認整個Insert語法有沒有錯誤.

    ORA-00911: 字元無效
    http://support.microsoft.com/kb/121550/en-us


    微軟技術支援中心(CSS) - http://www.dotblogs.com.tw/lolota/
    2009年7月7日 上午 07:03