如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML
https://support.microsoft.com/zh-cn/kb/315968
如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML
点击这里察看该文章的英文版: 315968
下面的 Microsoft.net 框架类库命名空间引用这篇文章:
- System.Data
- System.Data.SqlClient
本任务中
概要
本分步指南介绍了如何执行批量插入,用OpenXML方法的更新与其他 Microsoft.NET 数据提供程序。尽管本文中的示例使用 SqlClient 托管提供程序,您还可以使用 OLEDB 或 ODBC 托管提供程序。
要求
下面的列表列出了推荐使用的硬件、 软件、 网络基础结构和所需的服务包 ︰
- Microsoft Windows 2000 专业版,Microsoft Windows 2000 服务器,Microsoft Windows 2000 高级服务器或 Microsoft Windows NT 4.0 服务器
- Microsoft Visual Studio.NET
- Microsoft SQL Server 2000
创建项目
- 在 SQL Server 中使用以下代码创建一个表 ︰
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Employee]')
and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Employee]
GO CREATE TABLE [dbo].[Employee] (
[EmployeeId] [int] NOT NULL ,
[FirstName] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[LastName] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
- 在 SQL Server 中使用以下代码创建一个存储的过程 ︰
CREATE PROC sp_UpdateXML @empdata nText
AS
DECLARE @hDoc int
exec sp_xml_preparedocument @hDoc OUTPUT,@empdata --This code updates old data.
UPDATE Employee
SET
Employee.FirstName = XMLEmployee.FirstName,
Employee.LastName = XMLEmployee.LastName
FROM OPENXML(@hDoc, 'NewDataSet/Employee')
WITH (EmployeeId Integer, FirstName varchar(100), LastName varchar(100)) XMLEmployee
WHERE Employee.EmployeeId = XMLEmployee.EmployeeId --This code inserts new data. Insert Into Employee
SELECT EmployeeId, FirstName, LastName
FROM OPENXML (@hdoc, '/NewDataSet/Employee',1)
WITH (EmployeeId Integer, FirstName varchar(100), LastName varchar(100)) XMLEmployee
Where XMLEmployee.EmployeeId Not IN (Select EmployeeID from Employee) EXEC sp_xml_removedocument @hDoc
GO
- Visual Studio 的.NET,开始,然后在 Visual C#.NET 中创建新的控制台应用程序项目。
- 复制并将下面的代码粘贴到控制台应用程序中的Class1中 ︰
using System;
using System.Data.SqlClient;
using System.Data; namespace ConsoleApplication1
{
/// <summary>
/// Summary description for Class1
/// </summary>
class Class1
{
/// <summary>
/// Main entry point for the application
/// </summary>
[STAThread]
static void Main(string[] args)
{
try
{
BulkInsertUpdate();
System.Console.WriteLine("Successfully inserted and updated data");
System.Console.Read();
}
catch (System.Data.SqlClient.SqlException e)
{
System.Diagnostics.Debug.WriteLine (e.Message);
System.Console.WriteLine(e.Message);
}
}
static void BulkInsertUpdate()
{
//Steps:
//1. Create the dataset.
//2. Update the dataset.
//3. Insert some data.
//4. Save the changed data as XML
// and send XML to SQL Server through the stored procedure. //Declaration
System.Data.DataSet objDS;
SqlConnection objCon;
SqlCommand objCom1;
SqlDataAdapter objAdpt1;
String sConn;
sConn = "user id=myUser;password=YourPassword;" +
"Database=YourDatabase;Server=YourServer";
objDS = new DataSet();
objCon = new SqlConnection(sConn);
objCon.Open();
objCom1 = new SqlCommand();
objCom1.Connection = objCon;
objAdpt1 = new SqlDataAdapter(); //Step 1: Create the dataset.
CreateDataSetFromEmployee(objDS, objCom1,objAdpt1); //Step 2: Update the dataset.
System.Data.DataTable tbl = objDS.Tables["Employee"];
//DataRow aRow;
int i = 0;
foreach (DataRow aRow in tbl.Rows)
{
i++;
aRow["FirstName"] = aRow["FirstName"].ToString() + i;
aRow["LastName"] = aRow["LastName"].ToString() + i;
} //Step 3: Insert some data.
for( int ii = 1; ii <= 5; ii++)
{
DataRow newRow = tbl.NewRow();
int j = ii+100;
newRow["EmployeeId"] = j;
newRow["FirstName"] = "Fname" + j;
newRow["LastName"] = "LName" + j;
tbl.Rows.Add( newRow);
} //Step 4: Save the changed data as XML,
//and send the XML to SQL Server through the stored procedure.
//In SQL Server, you wrote a stored procedure that
//accepts this XML and updates the corresponding table. SaveThroughXML(objDS, objCon);
} static void SaveThroughXML(DataSet objDS, SqlConnection objCon)
{
//Change the column mapping first.
DataTable tbl = objDS.Tables["Employee"];
System.Text.StringBuilder sb = new System.Text.StringBuilder( 1000);
System.IO.StringWriter sw = new System.IO.StringWriter(sb); foreach( DataColumn col in tbl.Columns)
{
col.ColumnMapping = System.Data.MappingType.Attribute;
} objDS.WriteXml(sw, System.Data.XmlWriteMode.WriteSchema); SqlCommand objCom = new SqlCommand();
objCom.Connection = objCon;
objCom.CommandType = CommandType.StoredProcedure;
objCom.CommandText = "sp_UpdateXML"; objCom.Parameters.Add( new SqlParameter( "@empdata",
System.Data.SqlDbType.NText));
objCom.Parameters[0].Value = sb.ToString();;
objCom.ExecuteNonQuery();
} static void CreateDataSetFromEmployee( DataSet objDS,
SqlCommand objCom1,SqlDataAdapter objAdpt1)
{ //Create related objects.
objCom1.CommandType = CommandType.Text;
objCom1.CommandText = "Select EmployeeId, FirstName,LastName from Employee"; //Fill the Orders table.
objAdpt1.SelectCommand = objCom1;
objAdpt1.TableMappings.Add("Table", "Employee");
objAdpt1.Fill(objDS);
}
}
}
- 修改为您的环境相应的连接字符串。
- 按 F5 键生成并运行该应用程序。
- 按 ENTER 键关闭控制台窗口中,当应用程序停止运行时。
注意︰ 此示例不包含任何错误处理。
如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML的更多相关文章
- mybatis执行批量更新update
Mybatis的批量插入这里有http://ljhzzyx.blog.163.com/blog/static/38380312201353536375/.目前想批量更新,如果update的值是相同的话 ...
- mybatis执行批量更新数据
1.业务需求:同时执行多记录批量操作 2.实现方法: 1)mapping: 2) dao 层 3)Service 层(注意要使用Transactional,否则可能会导致数据紊乱) 4)Con ...
- mybatis执行批量更新batch update 的方法
1.数据库连接必须配置:&allowMultiQueries=true 我的配置如下:jdbc:mysql://10.20.13.16:3306/CALENDAR?useUnicode=tru ...
- Java使用多线程异步执行批量更新操作
import com.google.common.collect.Lists; import org.apache.commons.collections.CollectionUtils; impor ...
- Mybatis批量更新和插入
<update id="updateOrInsert"> <foreach collection="list" index="ind ...
- mysql根据查询结果批量更新多条数据(插入或更新)
mysql根据查询结果批量更新多条数据(插入或更新) 1.1 前言 mysql根据查询结果执行批量更新或插入时经常会遇到1093的错误问题.基本上批量插入或新增都会涉及到子查询,mysql是建议不要对 ...
- MySql快速插入以及批量更新
MySql快速插入以及批量更新 插入: MySql提供了可以一次插入多条数据的用法: [sql] INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6), ...
- Neo4j 第五篇:批量更新数据
相比图形数据的查询,Neo4j更新图形数据的速度较慢,通常情况下,Neo4j更新数据的工作流程是:每次数据更新都会执行一次数据库连接,打开一个事务,在事务中更新数据.当数据量非常大时,这种做法非常耗时 ...
- Hibernate批量更新和批量删除批量添加(转)
通常,在一个Session对象的缓存中只存放数量有限的持久化对象,等到Session对象处理事务完毕,还要关闭Session对象,从而及时释放Session的缓存占用的内存.批量处理数据是指在一个事务 ...
随机推荐
- shared_ptr<> reset
// std_tr1__memory__shared_ptr_reset.cpp // compile with: /EHsc #include <memory> #include < ...
- Protocol Buffer技术详解(语言规范)
Protocol Buffer技术详解(语言规范) 该系列Blog的内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于当前正在开发的一个公司内部项目的Demo.这样做的目的 ...
- python读写操作文件
with open(xxx,'r,coding='utf-8') as f: #打开文件赋值给F ,并且执行完了之后不需要 f.close(). 在Python 2.7 及以后,with又支持同时 ...
- .NET设计模式(2):单件模式(Singleton Pattern)(转载)
概述 Singleton模 式要求一个类有且仅有一个实例,并且提供了一个全局的访问点.这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程 序在调用某一个类时,它是不 ...
- Gradle用户指南(1)-Gradle安装
前置条件 Gradle 需要 Java JDK 或者 JRE,版本是 6 及以上.Gradle 将会装载自己的 Groovy 库,因此,Groovy 不需要被安装.任何存在的 Groovy 安装都会被 ...
- [Winform]DataGridView列自适应宽度
引言 在做winform项目中,数据控件DataGridView的使用多多少少是会用到的,如果不设置它的属性,默认情况下是不会自适应宽度的,你想查看某项的数据,就不得不将标题栏拖来拖去,挺烦的. 方法 ...
- Windows下Git Bash中文乱码
文章转自:http://ideabean.iteye.com/blog/2007367 打开Git Bash 进入目录:$ cd /etc 1. 编辑 gitconfig 文件:$ vi gitcon ...
- 直接拿来用!超实用的Java数组技巧攻略
java编程语言经验分享 摘要:本文分享了关于Java数组最顶级的11大方法,帮助你解决工作流程问题,无论是运用在团队环境或是在私人项目中,你都可以直接拿来用. 本文分享了关于Java数组最顶级的11 ...
- Linux下的网络管理工具—OpenNMS
导读 OpenNMS的是一个运营商级别的,高度集成的,开放源码的平台,用于构建网络监控解决方案.OpenNMS有两个发行版:Meridian and Horizon.使用Meridian是可取的,对企 ...
- CentOS 7安装Splunk
导读 Splunk是探索和搜索数据的最有力工具,从收集和分析应用程序.Web服务器.数据库和服务器平台的实时可视化海量数据流,分析出IT企业产生的海量数据,安全系统或任何商业应用,给你一个总的见解获得 ...