• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

用C#同时向SQLServer插入多行数据

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#比较两个对象是否相等(深度比较)发布时间:2022-07-13
下一篇:
C#文件在数据库的存取发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap