#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 UserName=@UserName
          
          -------导入表格
          
          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表格中货品编号为:'+@ProductNo+'不能出现重复!';
            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'数据库中货品编号为:'+@ProductNo+'不能出现重复导入!';
            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'库存表中不存在中货品编号为:'+@ProductNo+'的货品!';
            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

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

  1. SQL操作XML

    前面一段时间为了赶项目的进度,一直在加班,现在空闲了下来将前面碰到的问题整理了一下,发现了一些十分有用的,在此记录下来,看能不能帮助到遇到同样问题的朋友,此文仅是自己个人的意见,若存在问题,还望不宁赐 ...

  2. sql操作xml小总结

    一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XM ...

  3. (转)SQL对Xml字段的操作

    T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...

  4. SQL对Xml字段的操作

    转:http://www.cnblogs.com/youring2/archive/2008/11/27/1342288.html T-Sql操作Xml数据 一.前言 SQL Server 2005 ...

  5. SQL Server 操作XML数据

    .xml.exist 输入为XQuery表达式,返回0,1或是Null.0表示不存在,1表示存在,Null表示输入为空 .xml.value 输入为XQuery表达式,返回一个SQL Server标量 ...

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

    原文轉自:http://blog.csdn.net/hliq5399/article/details/8315373 另外可參考:https://msdn.microsoft.com/en-us/li ...

  7. sql server 操作xml例子

    sql server 操作xml例子 /* sql xml 入门: --by jinjazz --http://blog.csdn.net/jinjazz 1.xml: 能认识元素.属性和值 2.xp ...

  8. 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器

    1. 血案由来 近期我在为Lazada卖家中心做一个自助注册的项目,其中的shop name校验规则较为复杂,要求:1. 英文字母大小写2. 数字3. 越南文4. 一些特殊字符,如“&”,“- ...

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

    1:SqlServer简单的操作XML: ALTER PROCEDURE [dbo].[SP_CRM_FranchiseeRecharge_Money] @Create_By VARCHAR(), @ ...

随机推荐

  1. 【转】Android开发之旅:环境搭建及HelloWorld

    原文网址: http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html 引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我 ...

  2. UVA 10652 Board Wrapping(凸包)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=32286 [思路] 凸包 根据角度与中心点求出长方形所有点来,然后就 ...

  3. 2013 ACM区域赛长沙 C Collision HDU 4793

    题意:在平面上0,0点,有一个半径为R的圆形区域,并且在0,0点固定着一个半径为RM(<R)的圆形障碍物,现在圆形区域外x,y,有一个半径 为r的,并且速度为vx,vy的硬币,如果硬币碰到了障碍 ...

  4. JavaScript高级程序设计45.pdf

    客户区坐标位置 clientX和clientY保存着鼠标指针在视口中的水平位置坐标和垂直位置坐标(显示出页面的部分叫做客户区,坐标信息不包括页面的滚动距离) var div=document.getE ...

  5. Bzoj 1878: [SDOI2009]HH的项链 莫队

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2717  Solved: 1363[Submit][Statu ...

  6. Yii框架zii.widgets.grid自定义按钮,ajax触发事件并提示

    相关类手册: http://www.yiichina.com/api/CButtonColumn   buttons 属性 public array $buttons; the configurati ...

  7. 【转】shell 教程——01 Shell简介:什么是Shell,Shell命令的两种执行方式

    Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释 ...

  8. S2SH邮件注册激活后注册成功

    首先我的思路是这样的:①接收从客户端接收过来的数据(密码,用户名,邮箱) ②将密码进行MD5加密,然后将信息用"_"连接起来(用于后面分解) ③将信息交个一个工具类中实现生成邮件信 ...

  9. office文件在线预览,模仿网易邮箱在线预览的

    最近研究了半天,代码是倾情奉送啊,C#,asp.net的 这个原理是office文件转换为PDF文件,然后再转换成SWF文件,FlexPaper+swfTools. 有个问题,需要在web.confi ...

  10. 深入理解Objective-C:优化你的代码

    开篇 只要用到Objective-C,我们每天都会跟方法调用打交道.我们都知道Objective-C的方法决议是动态的,但是在底层一个方法究竟是怎么找到的,方法缓存又是怎么运作的却鲜为人知. 本文主要 ...