2012-05-12 2 views
-1

나는 C#을 사용하여 저장 프로 시저 매개 변수로 XML 파일을 전달하는 가장 간단한 방법을 찾고 있습니다. 실제로 XML 파일을 만들어야합니다. 이 XML을 SQL 데이터베이스에 저장하십시오. 데이터베이스 저장 프로 시저에는 xml 유형의 매개 변수가 있습니다. 나는 이미 내가 원하는 경우 XML을 매개 변수로 저장 프로 시저에이 파일을 전송하기 위해 무엇을 할 것이다가장 간단한 방법은 C#을 사용하여 저장 프로 시저 매개 변수로 XML 파일을 전달하는 것입니다 #

StringWriter stringWriter = null; 
XmlTextWriter writer = null; 
try 
{ 
    stringWriter = new StringWriter(new StringBuilder()); 
    writer = new XmlTextWriter(stringWriter); 
    writer.Formatting = Formatting.Indented; 
    writer.WriteStartDocument(); 
    writer.WriteComment("Holiday Info"); 

    writer.WriteStartElement("holidayInfo", ""); 

    for (int groupIndex = 0; groupIndex < numberOfGroup; groupIndex++) 
     { 
      for (int religionIndex = 0; religionIndex < numberOfReligion; religionIndex++) 
      { 
       for (int jobStationIndex = 0; jobStationIndex < numberOfJobStation; jobStationIndex++) 
       { 
        writer.WriteStartElement("HOLIDAY", ""); 
        writer.WriteAttributeString("intGroupID", chkGroupList.Items[groupIndex].Value.ToString()); 
        writer.WriteAttributeString("intJobTypeId", "0"); 
        writer.WriteAttributeString("intJobStationID", chkReligionList.Items[religionIndex].Value.ToString()); 
        writer.WriteAttributeString("intHolidayID", ddlHolidayName.SelectedValue.ToString()); 
        writer.WriteAttributeString("dtePermitedDate", DateTime.Now.ToShortDateString()); 
        writer.WriteAttributeString("intReligionId", chkReligionList.Items[religionIndex].Value.ToString()); 
        writer.WriteAttributeString("dteFromDate", txtFromDate.Text); 
        writer.WriteAttributeString("dteToDate", txtToDate.Text); 
        writer.WriteEndElement(); 
       } 
      } 

     } 
     stringWriter.GetStringBuilder().ToString(); 
     return will be what if i want to sent this file to the store procedure parameter?; 
    } 
    finally 
    { 
     if (writer != null) writer.Close(); 
     if (stringWriter != null) stringWriter.Close(); 
    } 

반환 형식 노호 언급 XML 파일을 만들었습니다?

는 절차

서로 다른 접근 방식이 정당 유효 할 수 귀하의 질문에 "간단한"규정은 매우 주관적이다
CREATE PROCEDURE [dbo].[sprHoliday_InsertHolidaysGroupPermission] 
@intUserID INT =NULL, 
@xmlHolidayPermissionDetails XML, 
@insertStatus AS VARCHAR(200) OUT 
AS 
BEGIN 
DECLARE @intEmployeeID int 
IF (@intUserID IS NOT NULL) 
BEGIN 
    SELECT @intEmployeeID = intEmployeeID From dbo.tblUserInfo WHERE tblUserInfo.intUserID = @intUserID  
END 

BEGIN TRANSACTION 
BEGIN TRY 
    INSERT INTO dbo.tblEmployeeGroupPermissionHolidays 
       (intGroupID, 
       intJobTypeId, 
       intJobStationID, 
       intHolidayID, 
       dtePermitedDate, 
       intReligionId, 
       dteFromDate, 
       dteToDate) 
     (SELECT xmlHolidayPermissionDetails.item.value('@intGroupID[1]', 'INT'), 
       xmlHolidayPermissionDetails.item.value('@intJobTypeId[1]', 'INT'), 
       xmlHolidayPermissionDetails.item.value('@intJobStationID[1]', 'INT'), 
       xmlHolidayPermissionDetails.item.value('@intHolidayID[1]', 'INT'), 
       xmlHolidayPermissionDetails.item.value('@dtePermitedDate[1]', 'DATE'), 
       xmlHolidayPermissionDetails.item.value('@intReligionId[1]', 'INT'), 
       xmlHolidayPermissionDetails.item.value('@dteFromDate[1]', 'DATE'), 
       xmlHolidayPermissionDetails.item.value('@dteToDate[1]', 'DATE') 
      FROM @xmlHolidayPermissionDetails.nodes('//HOLIDAY') AS xmlHolidayPermissionDetails(item) 
     ) 
    COMMIT 
    INSERT INTO dbo.tblHRDataHistory values('Insert','Holiday Permission Data Insert','tblEmployeeGroupPermissionHolidays',GETDATE(),@intEmployeeID) 
    SET @insertStatus = 'Holiday Permission has been iserted succesfully' 
END TRY 

BEGIN CATCH 
Rollback 
SELECT @insertStatus = 'There was an error! ' + ERROR_MESSAGE() 
END CATCH 

END 
+0

XML 문자열을 반환 할 수있는 것처럼 보입니다. 하지만 확실하게 SP를 게시해야합니다. –

답변

2
System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 
doc.LoadXml(string); 

. 당신은 당신이 쉽게 다른 문서에 추가 할 수있는 요소가 필요한 경우

XDocument doc = XDocument.Parse(text); 

이 : 전체 문서에 대한

+1

.NET 3.5 이상을 사용하지 않는 경우 사용해야하는 .NET 2.0 API입니다. 그렇지 않으면 .NET 3.5의'XDocument'는 더 멋진 LINQ 지원 API를 제공합니다. –

+0

오, 고마워. .NET에서 잠시 동안 아무것도 개발하지 못했습니다. 나는 좀 구식이야. – Leri

+0

당신의 답변을 주셔서 감사합니다하지만 반환 형식은 XML 것입니다 함수가 필요합니다. – yeasir007

2

내 가게입니다. 그럼에도 불구하고, 여기에 "간단한"솔루션입니다 :이 작업을해야

XDocument doc = XDocument.Parse(xmlstring); 

XElement el = doc.Root; 
+0

답해 주셔서 고맙습니다.하지만 xml을 반환하는 함수가 필요합니다. – yeasir007

+0

'XDocument'와'XElement'는 각각 XML 문서와 XML 요소의 강력한 형식화 된 표현입니다. .NET 3.5+ – xandercoded

3

XElement element = XElement.Parse(text); 

을이 당신이 .NET 3.5을 사용하는 가정입니다 - LINQ to XML은 이전 API보다 훨씬 낫습니다.

반복적으로 "반환되는 형식은 xml 일 수있는 함수"가 필요하다는 것에 유의하십시오. .NET에는 "xml"과 같은 유형이 없지만 XElement, XDocument 등의 유형은 XML API의 유형입니다. 위에서와 같이 이미 XDocument.ParseXElement.Parse으로 존재하는 별도의 메소드를 생성 할 필요가 없습니다.

"xml 파일"도 약간 이상합니다. 참고로 혼란 스럽습니다. 당신은 을 쓰려고합니까? 데이터를 파일에 쓰시겠습니까? 파일에서 읽으시겠습니까? 필요한 경우 파일이 요구 사항과 어떤 관련이 있습니까?

실제하고 싶은 일에 대해 자세히 설명해 주시면 더 많은 도움을 드릴 수 있습니다.

+0

'XElement.Parse()'는 '문서'를 아주 잘 처리 할 것입니다. –

+0

@HenkHolterman : 물론 - 편집합니다. 제 요점은 요소를 원한다면 * 요소를 먼저 구문 분석 할 필요가 없다는 것입니다. –

관련 문제