C#和SQL操作Xml

#region DataTableToXml
        public static string DataTableToXml(System.Data.DataTable Dt)
        {
            StringBuilder sbHtml = new StringBuilder();
            if (Dt.Rows.Count > 0)
            {
                sbHtml.Append("<Root>");
                for (int j = 0; j < Dt.Rows.Count; j++)
                {
                    sbHtml.Append("<Detail ");
                    for (int i = 0; i < Dt.Columns.Count; i++)
                    {
                        sbHtml.AppendFormat("{0}=\"{1}\"  ", Dt.Columns[i], Dt.Rows[j][Dt.Columns[i]]);
                    }
                    sbHtml.Append("></Detail>");
                }
                sbHtml.Append("</Root>");
            }
            return sbHtml.ToString();
        }
        #endregion

USE [DataBaseName]
GO
/****** Object:  StoredProcedure [dbo].[AdjustPriceDetail_Temp_Excel]    Script Date: 12/25/2014 11:11:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Proc [dbo].[AdjustPriceDetail_Temp_Excel]
@UserName nvarchar(50),
@AdjustNo nvarchar(50),
@Detail NText
As

declare @hDoc int
Declare @ProductNo Nvarchar(50)
Declare @ErrorSql Nvarchar(200)
Begin Tran
Begin
          set nocount on
         
          ------首先清除之前导入的数据
          delete from AdjustPriceDetail_Temp where [email protected]
          
          -------导入表格
          
          Select Top 0 ProductNo,GoldPrice,acGold,MStoneCost,SStoneCost,acStone,acLabor,acOthers,acTotal,SalesFactor,SalesPrice
          Into #AdjustPrice From AdjustPriceDetail_Temp

exec sp_xml_preparedocument @hDoc output,@Detail
          Insert Into #AdjustPrice(ProductNo,GoldPrice,acGold,MStoneCost,SStoneCost,acStone,acLabor,acOthers,acTotal,SalesFactor,SalesPrice)
          Select ProductNo,GoldPrice,acGold,MStoneCost,SStoneCost,acStone,acLabor,acOthers,acTotal,SalesFactor,SalesPrice
          from openxml(@hDoc,‘/Root/Detail‘)
          with AdjustPriceDetail_Temp where ProductNo<>‘‘
          
          if @@Error<>0 goto Err
          exec sp_xml_removedocument @hDoc
        
          --1.产品编号
          Set @ProductNo=(Select Top 1 ProductNo From #AdjustPrice Group By ProductNo having(COUNT(ProductNo)>1))
          IF @ProductNo Is Not Null
          Begin
            Set @ErrorSql= N‘EXCEL表格中货品编号为:‘[email protected]+‘不能出现重复!‘;
            Goto Err
          End
          
         Set @ProductNo=(Select Top 1 ProductNo From AdjustPriceDetail_Temp Where ProductNo In(Select ProductNo From #AdjustPrice))
          IF @ProductNo Is Not Null
          Begin
            Set @ErrorSql= N‘数据库中货品编号为:‘[email protected]+‘不能出现重复导入!‘;
            Goto Err
          End
          
          Set @ProductNo=(Select Top 1 ProductNo From #AdjustPrice Where ProductNo NOT In(Select ProductNo From Product))
          IF @ProductNo Is Not Null
          Begin
            Set @ErrorSql= N‘库存表中不存在中货品编号为:‘[email protected]+‘的货品!‘;
            Goto Err
          End
          
       INSERT INTO AdjustPriceDetail_Temp
           ([UserName]
           ,[AdjustPriceNo]
           ,[ProductNo]
           ,[ProductName]
           ,[StyleNo]
           ,[SubTypeNo]
           ,[ItemTypeNo]
           ,[FinenessNo]
           ,[SalesTypeNo]
           ,[NetWtGM]
           ,[acGoldWtGM]
           ,[GoldPrice]
           ,[acGold]
           ,[MStoneQty]
           ,[MStoneWt]
           ,[SStoneQty]
           ,[SStoneWt]
           ,[MStoneCost]
           ,[SStoneCost]
           ,[acStone]
           ,[acLabor]
           ,[acOthers]
           ,[acTotal]
           ,[SalesFactor]
           ,[SalesPrice])
     select
           @UserName,
           @AdjustNo,
           A.ProductNo,
           B.ProductName,
           B.StyleNo,
           B.SubTypeNo,
           B.ItemTypeNo,
           B.FinenessNo,
           B.SalesTypeNo,
           B.NetWtGM,
           B.acGoldWtGM,
           A.GoldPrice,
           A.acGold,
           B.MStoneQty,
           B.MStoneWt,
           B.SStoneQty,
           B.SStoneWt,
           A.MStoneCost,
           A.SStoneCost,
           A.acStone,
           A.acLabor,
           A.acOthers,
           A.acTotal,
           A.SalesFactor,
           A.SalesPrice
           from #AdjustPrice AS A left join Product AS B On A.ProductNo = B.ProductNo
        
        if @@Error<>0 goto Err
        
        Drop Table #AdjustPrice
        
        if @@Error<>0 goto Err
       
       Select N‘success‘ As ErrorSql

End
Commit Tran
Return
Err:
RollBack Tran
Select @ErrorSql As ErrorSql
Return

时间: 2024-10-13 14:10:42

C#和SQL操作Xml的相关文章

SQL操作XML

/* sql xml 入门: 1.xml:能认识元素.属性和值 2.xpath: 寻址语言,类似windows目录的查找(没用过dir命令的话就去面壁) 语法格式,这些语法可以组合为条件:"."表示自己,".."表示父亲,"/"表示儿子,"//"表示后代, "name"表示按名字查找,"@name"表示按属性查找  "集合[条件]" 表示根据条件取集合的子集,条件可以

(轉載)sql server xml字段的操作

原文轉自:http://blog.csdn.net/hliq5399/article/details/8315373 今天用到sql server 的xml字段,首先这个项目中的xml字段都存为了ntext字段,所以第一个操作 ntext 转化为 xml 以下摘自 http://blog.darkthread.net/blogs/darkthreadtw/archive/2008/09/18/sql2005-nvarchar-to-xml.aspx XmlString是一個NText欄位,裡面放

(转)SQL对Xml字段的操作

T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象 (BLOB). 用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中. 随着SQL Server 对XM

SQL对Xml字段的操作

原文:SQL对Xml字段的操作 T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象 (BLOB). 用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中.

SqlServer简单的操作XML以及SQl的 try catch等统一格式

1:SqlServer简单的操作XML: ALTER PROCEDURE [dbo].[SP_CRM_FranchiseeRecharge_Money] @Create_By VARCHAR(50), @xmlStr1 NVARCHAR(MAX) -写在这里面的为 传入的参数 AS BEGIN as begin后面的为自定义的变量 SET NOCOUNT ON; DECLARE @xml XML = @xmlStr1; sqlserver操作XML T-SQL提供了以下几个针对XML类型的查询函

Sql Server xml 类型字段的增删改查

1.定义表结构 在MSSM中新建数据库表CommunicateItem,定义其中一个字段ItemContentXml 为xml类型 2.编辑表数据,新增一行,发现xml类型不能通过设计器录入数据. 需要写sql更新或插入. DECLARE @xml XML SET @xml=' <MyHobby> <MyCode>1</MyCode> <MyName>爬山</MyName> </MyHobby> <MyHobby> <

SQL读取XML字段

最近要对一套老系统进行数据迁移,这样苦逼的工作就来了,需要新旧两套系统数据表字段进行对比,最终将老系统的数据迁移到新系统中来. 尽管数据结构不一致.部分字段不一致,也只是恶心一点麻烦一点,勉勉强强速度慢点,还是可以整理出来,并编写好迁移的SQL语句. 一步一步走了好几步了,出来个更恶心的怪物了!强大的XML数据字段 本来应该是单独存到一个子表的信息,在老系统中硬生生的存到了一个XML字段中 <root> <people id=1 name=tom/> <people id=2

SQL FOR XML

原文:SQL FOR XML 摘要:sql中的for xml语法为表转化为xml提供了很好的支持,当然使用同样的程序语言也能够达到同样的效果,但是有了for xml将使得这一切更加的方便. 主要内容: Select 的查询结果会作为行集返回,但是你同样可以在sql中指定for xml子句使得查询作为xml来检索.在for xml子句中,可以指定以下模式之一:RAW .AUTO.EXPLICIT和PATH. RAW模式返回行为元素,每一列的值作为元素的属性:AUTO模式返回表名为节点的元素,每一列

黄聪:C#操作xml SelectNodes,SelectSingleNode通过 xPath 定位class包含Contains的DIV

一. SelectNodes,SelectSingleNode总是返回NULL 下面以一个简单的xml为例: <?xml version="1.0"?> <message xmlns="http://www.mydomain.com/MyDataFeed" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://www.mydomain.