-1

c# を使用して xml ファイルをストア プロシージャ パラメーターとして渡す最も簡単な方法を探しています。実際には、この xml を sql データベースに保存するために xml ファイルを作成する必要があります。 xml タイプ。以下の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
4

3 に答える 3

3

ドキュメント全体の場合:

XDocument doc = XDocument.Parse(text);

別のドキュメントに簡単に追加できる要素が必要な場合:

XElement element = XElement.Parse(text);

これは、.NET 3.5 を使用していることを前提としています。LINQ to XML は、古い API よりも優れています。

「戻り値の型がxmlになる関数」が必要だと繰り返し言ったことに注意してください。.NET には "xml" のような型はありませんがXElementXDocumentなどの型は XML API 内の型です。それらを返すために別のメソッドを作成する必要はありません。上記のように、それらは既にXDocument.ParseおよびXElement.Parseとして存在します。

あなた自身の要件について混乱していると思います-「xmlファイルを返す」も少し奇妙であることに注意してください。データをファイルに書き込もうとしていますか? ファイルから読み取りますか?そうでない場合、ファイルは要件とどのような関係がありますか?

あなたが実際に何をしようとしているのかについてもっと詳しく教えていただければ、私たちはもっとあなたを助けることができるかもしれません.

于 2012-05-12T12:26:25.600 に答える
2

さまざまなアプローチが正当に有効である可能性があるため、質問の「最も単純な」修飾子は非常に主観的です。それにもかかわらず、ここに「簡単な」解決策があります:

XDocument doc = XDocument.Parse(xmlstring);

XElement el = doc.Root;
于 2012-05-12T12:20:05.063 に答える
2
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(string);

これはうまくいくはずです。

于 2012-05-12T12:21:18.813 に答える