2012-05-12 8 views
-1

私は、ストアプロシージャのパラメータとして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); 

:それにもかかわらず、ここでは "シンプル" なソリューションです。文書全体のために

+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

XDocument doc = XDocument.Parse(text); 

あなたはちょうどあなたが簡単に別の文書に追加することができます要素が必要な場合:

XElement element = XElement.Parse(text); 

これはあなたが.NET 3.5を使用していると仮定している - LINQ XMLへの変換は、古いAPIよりもはるかに良いです。

「あなたは型を返す関数がxmlになる」必要があると繰り返し言いました。 .NETには "xml"というタイプはありませんが、XElement,XDocumentなどのタイプはXML API内のタイプです。上記のように、別のメソッドを作成する必要はありません。既に存在するのはXDocument.ParseXElement.Parseです。

あなた自身の要件について混乱していると思われます。「返信するxml ファイル」もちょっと奇妙です。あなたはにファイルを書き込もうとしていますか?ファイルから読み込みますか?必要でない場合、ファイルはあなたの要件と何をする必要がありますか?

実際に何をしようとしているかについて詳しく知ることができれば、より多くのことができます。

+0

'XElement.Parse()'は '文書'をかなりうまく扱います。 –

+0

@HenkHolterman:確かに - 編集します。私の要点は、要素がほしい*場合*要素を最初に解析する必要はないということです。 –

関連する問題