用C#同时向SQL Server插入多行数据
2009-03-24 10:57
483 查看
SQL Server2000存储过程只支持一次插入一条记录。如果要插入多条记录的话就得重复执Insert语句,但是利用SQL Server2000的XML支持却可以实现一次向数据库插入多条记录。程序代码如下:
//创建表
DataTable dt=new DataTable();
SqlConnection sqlConnection=new SqlConnection("data source=localhost;
initial catalog=NewTopicSystem;user id=sa;pwd=;packet size=4096");
sqlConnection.Open();
SqlCommand sqlCommand=new SqlCommand();
sqlCommand.CommandType=CommandType.Text;
sqlCommand.Connection=sqlConnection;
sqlCommand.CommandText="Select top 1 *
from NewTopicSystem_Admin";
SqlDataAdapter sqlDataAdapter=new SqlDataAdapter(sqlCommand);
//填充表的结构(如何能有效获取表的结果?)
sqlDataAdapter.FillSchema(dt,SchemaType.Mapped);
//设置表名并添加2个新行
dt.TableName="Test";
DataRow row_1=dt.NewRow();
DataRow row_2=dt.NewRow();
object[] myObject_1={"111","111","111","111"};
object[] myObject_2={"222","222","222","222"};
row_2.ItemArray=myObject_2;
row_1.ItemArray=myObject_1;
dt.Rows.Add(row_1);
dt.Rows.Add(row_2);
DataSet ds=new DataSet();
ds.Tables.Add(dt);
sqlCommand.Dispose();
//获取XML序列
string temp=ds.GetXml();
sqlCommand.CommandType=CommandType.StoredProcedure;
SqlParameter parm=new SqlParameter("@parm",SqlDbType.NVarChar,1000);
parm.Value=temp;
sqlCommand.CommandText="StoredProcedure_Test";
sqlCommand.Parameters.Add(parm);
sqlCommand.ExecuteNonQuery();
sqlConnection.Close();
存储过程:
ALTER PROCEDURE dbo.StoredProcedure_Test
(
@parm Nvarchar(1000)
)
AS
DECLARE @idoc int
exec sp_xml_preparedocument @idoc output,@parm
Insert NewTopicSystem_Admin(UserName,Password,[Power],Description)(SELECT *FROM OPENXML(@idoc, ''//Test'',2) WITH(UserName varchar(10) ''UserName'' , Password varchar(20) ''Password'',[Power] varchar(20) ''Power'',Description varchar(20) ''Description''))
EXEC sp_xml_removedocument @idoc
RETURN
系统存储过程返回创建XML文档的内部表示法.关于OpenXML,在SQL Server2000联机丛书中有如下定义:OPENXML 通过 XML 文档提供行集视图.由于OPENXML 是行集提供程序,因此可在会出现行集提供程序(如表、视图或 OPENROWSET函数)的 Transact-SQL 语句中使用 OPENXML.其语法形式为OpenXML(XML文档的内部表示句柄,Xpath表达式,行集之间的映射关系)。行集之间的映射关系常用的取值为1,2.取1映射为属性,取2表示映射为元素.在上面的代码中映射的元素,因为程序生成的XML序列节点Test只包含元素。
最后sp_xml_removedocument删除以前创建的XML文档内部表示句柄。
//创建表
DataTable dt=new DataTable();
SqlConnection sqlConnection=new SqlConnection("data source=localhost;
initial catalog=NewTopicSystem;user id=sa;pwd=;packet size=4096");
sqlConnection.Open();
SqlCommand sqlCommand=new SqlCommand();
sqlCommand.CommandType=CommandType.Text;
sqlCommand.Connection=sqlConnection;
sqlCommand.CommandText="Select top 1 *
from NewTopicSystem_Admin";
SqlDataAdapter sqlDataAdapter=new SqlDataAdapter(sqlCommand);
//填充表的结构(如何能有效获取表的结果?)
sqlDataAdapter.FillSchema(dt,SchemaType.Mapped);
//设置表名并添加2个新行
dt.TableName="Test";
DataRow row_1=dt.NewRow();
DataRow row_2=dt.NewRow();
object[] myObject_1={"111","111","111","111"};
object[] myObject_2={"222","222","222","222"};
row_2.ItemArray=myObject_2;
row_1.ItemArray=myObject_1;
dt.Rows.Add(row_1);
dt.Rows.Add(row_2);
DataSet ds=new DataSet();
ds.Tables.Add(dt);
sqlCommand.Dispose();
//获取XML序列
string temp=ds.GetXml();
sqlCommand.CommandType=CommandType.StoredProcedure;
SqlParameter parm=new SqlParameter("@parm",SqlDbType.NVarChar,1000);
parm.Value=temp;
sqlCommand.CommandText="StoredProcedure_Test";
sqlCommand.Parameters.Add(parm);
sqlCommand.ExecuteNonQuery();
sqlConnection.Close();
存储过程:
ALTER PROCEDURE dbo.StoredProcedure_Test
(
@parm Nvarchar(1000)
)
AS
DECLARE @idoc int
exec sp_xml_preparedocument @idoc output,@parm
Insert NewTopicSystem_Admin(UserName,Password,[Power],Description)(SELECT *FROM OPENXML(@idoc, ''//Test'',2) WITH(UserName varchar(10) ''UserName'' , Password varchar(20) ''Password'',[Power] varchar(20) ''Power'',Description varchar(20) ''Description''))
EXEC sp_xml_removedocument @idoc
RETURN
系统存储过程返回创建XML文档的内部表示法.关于OpenXML,在SQL Server2000联机丛书中有如下定义:OPENXML 通过 XML 文档提供行集视图.由于OPENXML 是行集提供程序,因此可在会出现行集提供程序(如表、视图或 OPENROWSET函数)的 Transact-SQL 语句中使用 OPENXML.其语法形式为OpenXML(XML文档的内部表示句柄,Xpath表达式,行集之间的映射关系)。行集之间的映射关系常用的取值为1,2.取1映射为属性,取2表示映射为元素.在上面的代码中映射的元素,因为程序生成的XML序列节点Test只包含元素。
最后sp_xml_removedocument删除以前创建的XML文档内部表示句柄。
相关文章推荐
- 同时向SQL数据库插入多行数据
- sql server 2000 插入多行数据
- C#向SQL Server插入数据返回主键
- Sql Server 插入数据的同时返回插入数据的ID/主键信息
- 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期
- SQL Server 2008中一次插入多行数据语法。
- SQL Server 2008 学习笔记【一】 一次性插入多行数据的问题
- .net中c#访问sql server插入数据时获取自增长列数据
- C#拼接SQL语句,SQL Server 2005+,多行多列大数据量情况下,使用ROW_NUMBER实现的高效分页排序
- C# 把一个DT内的数据 批量插入到数据库里(SQL server 2005)
- SQL Server 2008 插入多行数据
- php 多行数据同时插入
- sql server 的T-SQL 学习笔记(二)--- 解决union select插入多行数据过滤数据(union all)
- Expression构建DataTable to Entity 映射委托 sqlserver 数据库里面金额类型为什么不建议用float,实例告诉你为什么不能。 sql server 多行数据合并成一列 C# 字符串大写转小写,小写转大写,数字保留,其他除外 从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法 纯CSS打造淘宝导航菜单栏 C# Winform
- SQL Server插入中文数据出现乱码问题
- C# 通过DataTable插入大量数据,50万数据只需要3秒
- C#:几种数据库的大数据批量插入 - faib
- C#程序中:如何向xml文件中插入节点(数据)
- sql server 将A数据库中a表的数据插入B数据库中的b表
- Oracle触发器实现插入或更新一张表数据同时插入或更新另一张表