C# 在genric中列出传递给xml的值。如何执行sql的插入和更新操作?

C# 在genric中列出传递给xml的值。如何执行sql的插入和更新操作?,c#,sql,asp.net,xml,generic-list,C#,Sql,Asp.net,Xml,Generic List,场景:1.具有gridview和5条记录的表单。绑定数据库中的记录2。我选择了一个以上的记录自动完成,然后添加到gridview。3.next从该gridview中删除了另一条记录,然后通过XML将值传递给DB。我的xml代码如下 <?xml version="1.0"?> <ArrayOfLanuageInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/

场景:1.具有gridview和5条记录的表单。绑定数据库中的记录2。我选择了一个以上的记录自动完成,然后添加到gridview。3.next从该gridview中删除了另一条记录,然后通过XML将值传递给DB。我的xml代码如下

<?xml version="1.0"?>
<ArrayOfLanuageInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SpokenLanuageInfo>
    <LanguageId>154</LanguageId>  
  </SpokenLanuageInfo>
  <SpokenLanuageInfo>
    <LanguageId>46</LanguageId>
  </SpokenLanuageInfo>
  <SpokenLanuageInfo>
    <LanguageId>53</LanguageId>
  </SpokenLanuageInfo>
</ArrayOfLanuageInfo>

here one recoded am deleted ,one record added so how to do ??
 -deleted record should remove from table
 -new record insert into table

Stored Procedure like this : 
// here am deleting all records based on id every time and then inserting table so i don't want like this //
 DELETE FROM [dbo].LANGUAGE WHERE  [HOSPITAL_ID]=@HOSPITAL_ID

                                  INSERT INTO [dbo].LANGUAGE
                                  (
                                     HOSPITAL_ID, LANGUAGE_ID
                                  )
                                 SELECT  @HOSPITAL_ID,LanguageId
                           FROM   
                              OPENXML(@XmlHandleSAVELANGUAG,'/ArrayOfLanuageInfo/LanuageInfo',2)  
                                   WITH   
                                    (  LanguageId INT )   
                    END

这是使用SQL合并的理想候选者。 它允许您在单个语句中根据匹配条件插入/更新/删除

有关更多信息,请查看

编辑:下面是一些与OPENXML一起使用SQL合并的示例代码

declare @idoc int;
declare @inputXml xml = N'
<data>
    <item>
        <id>1</id>
        <name>first</name>
    </item>
    <item>
        <id>2</id>
        <name>second</name>
    </item>
    <item>
        <id>5</id>
        <name>fifth</name>
    </item>
</data>';
-- idoc is the xml representation we work with
EXEC sp_xml_preparedocument @idoc OUTPUT, @inputXml;


-- setup our table to merge
DECLARE @myTable TABLE (id int primary key, name varchar(50))
INSERT INTO @myTable (id, name)
VALUES 
    (1, 'one'),
    (2, 'two'),
    (3, 'three');

SELECT * FROM @myTable

-- merge the selected XML content into myTable
-- if we match on ID, update the name
-- if we don't find a match in the table, insert the entry in the XML
-- if we don't find a match in the XML, delete the entry in the table

MERGE INTO @myTable AS Target
USING 
    OPENXML(@idoc, 'data/item', 2) 
    WITH (id int 'id/text()', name nvarchar(50) 'name/text()')
    AS source
ON Target.id = source.id
WHEN MATCHED THEN UPDATE SET name = source.name
WHEN NOT MATCHED BY TARGET THEN INSERT (id, name) VALUES (id, name)
WHEN NOT MATCHED BY SOURCE THEN DELETE;

SELECT * FROM @myTable

这是使用SQL合并的理想候选者。 它允许您在单个语句中根据匹配条件插入/更新/删除

有关更多信息,请查看

编辑:下面是一些与OPENXML一起使用SQL合并的示例代码

declare @idoc int;
declare @inputXml xml = N'
<data>
    <item>
        <id>1</id>
        <name>first</name>
    </item>
    <item>
        <id>2</id>
        <name>second</name>
    </item>
    <item>
        <id>5</id>
        <name>fifth</name>
    </item>
</data>';
-- idoc is the xml representation we work with
EXEC sp_xml_preparedocument @idoc OUTPUT, @inputXml;


-- setup our table to merge
DECLARE @myTable TABLE (id int primary key, name varchar(50))
INSERT INTO @myTable (id, name)
VALUES 
    (1, 'one'),
    (2, 'two'),
    (3, 'three');

SELECT * FROM @myTable

-- merge the selected XML content into myTable
-- if we match on ID, update the name
-- if we don't find a match in the table, insert the entry in the XML
-- if we don't find a match in the XML, delete the entry in the table

MERGE INTO @myTable AS Target
USING 
    OPENXML(@idoc, 'data/item', 2) 
    WITH (id int 'id/text()', name nvarchar(50) 'name/text()')
    AS source
ON Target.id = source.id
WHEN MATCHED THEN UPDATE SET name = source.name
WHEN NOT MATCHED BY TARGET THEN INSERT (id, name) VALUES (id, name)
WHEN NOT MATCHED BY SOURCE THEN DELETE;

SELECT * FROM @myTable

编辑答案以包含示例源。如果我能澄清任何事情,请告诉我!编辑答案以包含示例源。如果我能澄清任何事情,请告诉我!顺便说一句,这似乎是一个关于SQL而不是ASP.Net的问题。也许值得编辑这个问题,以便更清楚地了解您在问什么。顺便说一句,这似乎是一个关于SQL而不是ASP.Net的问题。也许有必要对这个问题进行编辑,以便更清楚地了解你在问什么