在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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文档内部表示句柄。 |
请发表评论