SQLServer 针对大批量数据入库的解决方案

  1: 针对大批量数据入库,为了减少数据库的链接次数,使用xml的形式一次性的入库。具体参考代码如下:

ContractedBlock.gifExpandedBlockStart.gifSQL xml的格式写法
  CREATE Procedure B2B_cPersonCard_Xml
--Author:sey
--
Description:insert into B2B_cPersonCard
--
DateTime:2009-08-13
@xml nvarchar(max)
AS
begin
    
declare @idHandle int
    
EXEC sp_xml_preparedocument @idHandle OUTPUT, @xml  --创建xml的句柄
    print @idHandle  
    
    
INSERT INTO [B2B_cPersonCard] (cEmpID,cType,cName,cCode,cAirID)
      
SELECT cEmpID,cType,cName,cCode,cAirID FROM OPENXML(@idHandle,N'/root/PersonCard'with [B2B_cPersonCard]
      
      
IF @@ERROR=0
       
BEGIN
           
SELECT 1
       
END
       
ELSE
           
BEGIN
               
SELECT 0
           
END
           
       EXEC sp_xml_removedocument @idHandle  --xml文档会存储在sqlserver的缓存中,为了避免内存不足,执行该语句 以释放内存。

end

 

 2:C#组织Xml的格式的方法如下:

 

 

ContractedBlock.gif ExpandedBlockStart.gif C# 组织xml方法
  public bool ADDPersonCard(List<PersonCard> list, string pType, int pEmpID)
        {
            
//throw new Exception("The method or operation is not implemented.");

            XmlDocument document 
= new XmlDocument();
            XmlElement root 
= document.CreateElement("root");
            document.AppendChild(root);
            
foreach (PersonCard personEntity in list)
            {
                XmlElement xmlPerson 
= document.CreateElement("PersonCard");
                xmlPerson.SetAttribute(
"cEmpID", pEmpID.ToString());
                xmlPerson.SetAttribute(
"cType", pType);
                xmlPerson.SetAttribute(
"cName", personEntity.CradName);
                xmlPerson.SetAttribute(
"cCode", personEntity.CardCode);
                xmlPerson.SetAttribute(
"cAirID", personEntity.AirID);
                root.AppendChild(xmlPerson);
            }
            SqlParameter[] parameters 
= null;
            parameters 
= new SqlParameter[] { new SqlParameter("@xml", document.InnerXml) };
            
try
            {
                
int result = 0;
                result 
= int.Parse(DBLib.GetDataTableBySP("B2B_cPersonCard_Xml", parameters, DBConnEnm.B2BDB).Rows[0][0].ToString());
                
if (result > 0)
                {
                    
return true;
                }
                
else
                {
                    
return false;
                }
            }
            
catch (Exception e)
            {
                
throw e;
            }
        }

 

将数据组织成list 就ok了!

转载于:https://www.cnblogs.com/suneryong/archive/2009/10/21/1587343.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值