XML 데이터를 데이터베이스로 가져오기

다음은 XML의 최상위 자식 요소들을 한 줄씩 레코드로 간주하여 데이터베이스에 삽입하는 방법입니다.

코드 ```

        var settings = new XmlReaderSettings(); 
        settings.IgnoreWhitespace = true; 

        using (var xmlReader = XmlReader.Create("영한간略사전.xml")) 
        { 
            xmlReader.MoveToContent(); 
            xmlReader.Read(); 
            int recordCount = 0; 

            while (xmlReader.IsStartElement()) 
            { 
                recordCount++; 
                var insertCommand = new SqlCommand("INSERT INTO [dict].[dbo].[simplec]([ck]) VALUES (@ck)"); 
                insertCommand.Parameters.AddWithValue("@ck", xmlReader.ReadOuterXml()); 

                dbConnection.Execute(insertCommand); 
                Console.WriteLine($"데이터 삽입 완료: {recordCount}번째 행"); 
            } 
        } 
    }</div>

위에서 삽입된 데이터를 읽어 분석한 후, dc와 js 필드를 추출하여 다른 테이블에 저장합니다.

코드 ```
<div>        static void ParseAndStoreData() 
        { 
            using (var dbConnection = new SqlConnection(SharedMembers.LocalConnectionString)) 
            { 
                using (var selectCommand = dbConnection.CreateCommand()) 
                { 
                    selectCommand.CommandText = "SELECT [ck] FROM [dict].[dbo].[simplec]"; 
                    dbConnection.Open(); 

                    using (var reader = selectCommand.ExecuteReader()) 
                    { 
                        while (reader.Read()) 
                        { 
                            var ckData = (string)reader["ck"]; 
                            var xmlDoc = new XmlDocument(); 
                            xmlDoc.LoadXml(ckData); 

                            var navigator = xmlDoc.CreateNavigator(); 
                            var dcValue = navigator.SelectSingleNode("/CK/DC")?.Value; 
                            var jsNode = navigator.SelectSingleNode("/CK/JS"); 

                            if (jsNode != null) 
                            { 
                                var jsValue = jsNode.OuterXml; 

                                using (var insertConnection = new SqlConnection(SharedMembers.LocalConnectionString)) 
                                { 
                                    using (var insertCommand = insertConnection.CreateCommand()) 
                                    { 
                                        insertCommand.CommandText = "INSERT INTO [dict].[dbo].[jmyh2]([dc], [js]) VALUES(@dc, @js)"; 

                                        insertCommand.Parameters.Add(new SqlParameter("@dc", SqlDbType.NVarChar) { Value = dcValue }); 
                                        insertCommand.Parameters.Add(new SqlParameter("@js", SqlDbType.Xml) { Value = jsValue }); 

                                        insertConnection.Open(); 
                                        insertCommand.ExecuteNonQuery(); 
                                        Console.WriteLine(dcValue); 
                                    } 
                                } 
                            } 
                        } 
                    } 
                } 
            } 
        }</div>

실제로 XML을 직접 해석한 다음 데이터베이스 테이블에 삽입할 수도 있습니다. 이 예시에서는 XPath 기술을 사용했습니다.

코드 ```

        var settings = new XmlReaderSettings(); 
        settings.IgnoreWhitespace = true; 

        const string dictionaryName = "OxfordCollocations"; 
        using (var xmlReader = XmlReader.Create(dictionaryName + ".xml")) 
        { 
            xmlReader.MoveToContent(); 
            xmlReader.Read(); 
            long recordIndex = 0; 

            while (xmlReader.IsStartElement()) 
            { 
                var xmlDoc = new XmlDocument(); 
                xmlDoc.LoadXml(xmlReader.ReadOuterXml()); 

                var navigator = xmlDoc.CreateNavigator(); 
                var dcValue = navigator.SelectSingleNode("/CK/DC")?.Value; 
                var jsNode = navigator.SelectSingleNode("/CK/JS"); 

                recordIndex++; 
                var insertCommand = new SqlCommand($"INSERT INTO dict.dbo.{dictionaryName}(id, dc, js) VALUES(@id, @dc, @js)"); 

                insertCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.BigInt) { Value = recordIndex }); 
                insertCommand.Parameters.Add(new SqlParameter("@dc", SqlDbType.NVarChar) { Value = dcValue }); 
                insertCommand.Parameters.Add(new SqlParameter("@js", SqlDbType.Xml) { Value = jsNode?.OuterXml }); 

                dbConnection.Execute(insertCommand); 

                if (recordIndex % 1000 == 0) 
                    Console.WriteLine($"데이터 삽입 완료: {recordIndex:#,##0,000}번째 행"); 
            } 
        } 
    }</div>

태그: SQL XML C#

6월 30일 16:35에 게시됨