同时向SQL数据库插入多行数据

    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) 'Pass
word',[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文档内部表示句柄。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值