我正在寻找使用c#将xml文件作为存储过程参数传递的最简单方法。实际上,我需要创建一个xml文件,以便将此xml保存到sql数据库中。在数据库存储过程中,一个参数为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
答案 0 :(得分:3)
对于整个文件:
XDocument doc = XDocument.Parse(text);
如果您只需要一个可以轻松添加到另一个文档的元素:
XElement element = XElement.Parse(text);
假设您正在使用.NET 3.5 - LINQ to XML比旧API更好。
请注意,您已经反复说过,您需要“返回类型为xml的函数”。 .NET中没有“xml”这样的类型 - 但XElement
,XDocument
等类型是XML API中的类型。您无需创建单独的方法来返回它们 - 它们已经存在为XDocument.Parse
和XElement.Parse
,如上所示。
我怀疑你对自己的要求感到困惑 - 请注意“返回xml 文件”也有点奇怪。您是否正在尝试将数据写入文件?从文件中读取它?文件与您的要求有什么关系?
如果您可以提供有关您真正想做的事情的更多详细信息,我们可以为您提供更多帮助。
答案 1 :(得分:2)
您问题中的“最简单”限定符非常主观,因为不同的方法可以合理有效。尽管如此,这是一个“简单”的解决方案:
XDocument doc = XDocument.Parse(xmlstring);
XElement el = doc.Root;
答案 2 :(得分:2)
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(string);
这应该有用。