zoukankan      html  css  js  c++  java
  • 用C#同时向SQL Server插入多行数据

    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文档内部表示句柄。

  • 相关阅读:
    红帽RHEL7版本RHCE认证学习及考试经历
    高手总结的“恋爱法”学习Linux系统,效果更好。
    IT技术学习指导之Linux系统入门的4个阶段(纯干货带图)
    深度剖析Linux与Windows系统的区别
    浅谈学习掌握linux系统的优势
    新手要想学好Linux系统就必须做好这四件事情
    为什么高手离不了Linux系统?这就是我的理由
    总结七条助你成为Linux高手的超棒忠告
    分享记录我的Linux系统入门学习经验
    Oracle--表有LONG类型复制或导数报ORA00990
  • 原文地址:https://www.cnblogs.com/yaksea/p/1420302.html
Copyright © 2011-2022 走看看