با سلامی دوباره
این نمونه کد را هم پیدا کردم اما واقعیتش هیچ چیز ازش نفهمیدم اگه ممکنه روی این تکه کد توضیح بدید(البته بی زحمت)
public List<ImportJobMaterialsResult> ImportJobMaterials(int jobID, Stream stream, string coNumber, string coDesc, string xmlMapFile)
{
//Convert flat file to List<JobMaterialImport> using converter and XML mapping file
//Mapping file passed from FlatFileHandler.ashx in web project
FlatFileToObjectConverter<JobMaterialImport> converter = new FlatFileToObjectConverter<JobMaterialImport>(stream, xmlMapFile);
List<JobMaterialImport> imports = converter.ConvertToList();
imports = imports.Take(imports.Count - 2).ToList(); //last rows are bogus in flat-file
//Generate XML and pass to sproc
using (StringWriter sw = new StringWriter())
{
XmlSerializer xs = new XmlSerializer(typeof(List<JobMaterialImport>));
xs.Serialize(sw, imports);
try
{
//Pass materials into sproc
string xml = sw.ToString().Replace("utf-16", "utf-8");
return this.DataContext.ImportJobMaterials(xml, jobID, coNumber, coDesc).ToList();
}
catch (Exception exp)
{
Logger.Log("Error in JobManagementRepository.ImportJobMaterials", exp);
}
}
return null;
}
و
<ArrayOfJobMaterialImport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<JobMaterialImport>
<Area>BUILDING A</Area>
<Phase>LIGHTING</Phase>
<WorkCode>0</WorkCode>
<WorkCodeTitle>Manually Assigned</WorkCodeTitle>
<Description>4x1 1/2in. SQ BOX COMB KO</Description>
<Quantity>2</Quantity>
<TotalHours>10.46</TotalHours>
</JobMaterialImport>
<JobMaterialImport>
<Area>BUILDING A</Area>
<Phase>LIGHTING</Phase>
<WorkCode>0</WorkCode>
<WorkCodeTitle>Manually Assigned</WorkCodeTitle>
<Description>#8x 3/4 P/H SELF-TAP SCREW</Description>
<Quantity>4</Quantity>
<TotalHours>0.28</TotalHours>
</JobMaterialImport>
<JobMaterialImport>
<Area>BUILDING A</Area>
<Phase>LIGHTING</Phase>
<WorkCode>605</WorkCode>
<WorkCodeTitle>Wiring and System Devices</WorkCodeTitle>
<Description>1G TGL SWITCH PLATE - PLASTIC IVY</Description>
<Quantity>2</Quantity>
<TotalHours>0.89</TotalHours>
</JobMaterialImport>
</ArrayOfJobMaterialImport>
و این هم پروسیجر
CREATE PROCEDURE [ImportJobMaterials]
@JobMaterialsXml AS VARCHAR(MAX),
@JobID AS INT,
@ChangeOrderNumber AS VARCHAR(10) = NULL,
@ChangeOrderDescription AS VARCHAR(100) = NULL
AS
BEGIN
DECLARE @XML AS XML
DECLARE @MaterialsTable TABLE
(
ID INT IDENTITY(1,1),
Area VARCHAR(250),
Phase VARCHAR(250),
WorkCodeID INT,
WorkCodeTitle VARCHAR(250),
MaterialTitle VARCHAR(250),
Quantity DECIMAL(18,2),
TotalHours DECIMAL(18,2)
)
SELECT @XML = @JobMaterialsXml
INSERT INTO @MaterialsTable (Area, Phase, WorkCodeID, WorkCodeTitle, MaterialTitle, Quantity, TotalHours)
SELECT M.Item.query('./Area').value('.','VARCHAR(250)') Area,
M.Item.query('./Phase').value('.','VARCHAR(250)') WorkCode,
M.Item.query('./WorkCodeID').value('.','INT') WorkCodeID,
M.Item.query('./WorkCodeTitle').value('.','VARCHAR(250)') WorkCodeTitle,
M.Item.query('./MaterialTitle').value('.','VARCHAR(250)') MaterialTitle,
M.Item.query('./Quantity').value('.','DECIMAL(18,2)') Quantity,
M.Item.query('./TotalHours').value('.','DECIMAL(18,2)') TotalHours
FROM @XML.nodes('/ArrayOfJobMaterialImport/JobMaterialImport') AS M(Item)
--Process the data
END
تشکر