您目前已離線,請等候您的網際網路重新連線

如何: 執行大量更新和插入 OpenXML 使用 Visual C#.NET 中的.NET 提供者

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:315968
本文章的有 Microsoft Visual C++.NET] 版本請參閱 316245
本文參照下列 Microsoft.NET Framework 類別庫命名空間:
  • System.Data
  • System.Data.SqlClient

在此工作

結論
本文將逐步告訴您,如何執行大量插入,並利用 OpenXML 方法更新不同 Microsoft.NET 資料提供者。雖然本文中的範例使用 SqlClient Managed 提供者,您也可以使用 [OLEDB 或 ODBC Managed 提供者。

back to the top

需求

下列清單列出建議的硬體、 軟體、 網路基礎結構及您需要的服務套件:
  • Microsoft Windows 2000 專業版,Microsoft Windows 2000 Server,Microsoft Windows 2000 進階伺服器或 Microsoft Windows NT 4.0 伺服器
  • Microsoft Visual Studio.NET
  • Microsoft SQL Server 2000
back to the top

建立專案

  1. 在 SQL Server 中建立下列的程式碼的資料表:
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Employee]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[Employee]GOCREATE TABLE [dbo].[Employee] (	[EmployeeId] [int] NOT NULL ,	[FirstName] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,	[LastName] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) ON [PRIMARY]GO					
  2. 在 SQL Server 中使用下列的程式碼建立預存程序:
    CREATE PROC sp_UpdateXML @empdata nTextAS  DECLARE @hDoc int    exec sp_xml_preparedocument @hDoc OUTPUT,@empdata   --This code updates old data. UPDATE Employee  SET    Employee.FirstName = XMLEmployee.FirstName,   Employee.LastName = XMLEmployee.LastName FROM OPENXML(@hDoc, 'NewDataSet/Employee')          WITH (EmployeeId Integer, FirstName varchar(100),  LastName varchar(100))  XMLEmployeeWHERE    Employee.EmployeeId = XMLEmployee.EmployeeId--This code inserts new data.Insert Into Employee SELECT   EmployeeId, FirstName, LastName	FROM       OPENXML (@hdoc, '/NewDataSet/Employee',1)WITH (EmployeeId Integer, FirstName varchar(100),  LastName varchar(100))  XMLEmployeeWhere XMLEmployee.EmployeeId Not IN (Select EmployeeID from Employee)EXEC sp_xml_removedocument @hDocGO					
  3. 啟動 Visual 的 Studio.NET,並在 Visual C#.NET 中建立新的主控台應用程式專案。
  4. 複製,並將下列程式碼貼到主控台應用程式的 類別 1:
    using System;using System.Data.SqlClient;using System.Data;namespace ConsoleApplication1{    /// <summary>    /// Summary description for Class1    /// </summary>    class Class1    {        /// <summary>        /// Main entry point for the application        /// </summary>        [STAThread]        static void Main(string[] args)        {            try            {                BulkInsertUpdate();                    System.Console.WriteLine("Successfully inserted and updated data");                    System.Console.Read();            }            catch (System.Data.SqlClient.SqlException e)            {                System.Diagnostics.Debug.WriteLine (e.Message);                 System.Console.WriteLine(e.Message);            }        }        static void BulkInsertUpdate()        {            //Steps:            //1. Create the dataset.            //2. Update the dataset.            //3. Insert some data.            //4. Save the changed data as XML            //   and send XML to SQL Server through the stored procedure.			            //Declaration            System.Data.DataSet         objDS;            SqlConnection               objCon;            SqlCommand                  objCom1;            SqlDataAdapter              objAdpt1;            String                      sConn;            sConn = "user id=myUser;password=YourPassword;" +                     "Database=YourDatabase;Server=YourServer";            objDS = new DataSet();            objCon = new SqlConnection(sConn);            objCon.Open();            objCom1 = new SqlCommand();            objCom1.Connection = objCon;            objAdpt1 = new SqlDataAdapter();            //Step 1: Create the dataset.            CreateDataSetFromEmployee(objDS, objCom1,objAdpt1);			            //Step 2: Update the dataset.            System.Data.DataTable tbl = objDS.Tables["Employee"];            //DataRow aRow;            int i = 0;            foreach (DataRow aRow in tbl.Rows)            {                i++;                aRow["FirstName"] = aRow["FirstName"].ToString() + i;                aRow["LastName"] = aRow["LastName"].ToString() + i;            }			            //Step 3: Insert some data.            for( int ii = 1; ii <= 5; ii++)            {                DataRow	   newRow = tbl.NewRow();                int j = ii+100;                newRow["EmployeeId"] = j;                newRow["FirstName"] = "Fname" + j;                newRow["LastName"] = "LName" + j;                tbl.Rows.Add( newRow);            }			            //Step 4: Save the changed data as XML,             //and send the XML to SQL Server through the stored procedure.            //In SQL Server, you wrote a stored procedure that            //accepts this XML and updates the corresponding table.            SaveThroughXML(objDS, objCon);        }        static void SaveThroughXML(DataSet objDS, SqlConnection objCon)        {            //Change the column mapping first.            DataTable                    tbl = objDS.Tables["Employee"];            System.Text.StringBuilder    sb = new System.Text.StringBuilder( 1000);            System.IO.StringWriter       sw = new System.IO.StringWriter(sb);			            foreach( DataColumn col in tbl.Columns)            {                col.ColumnMapping = System.Data.MappingType.Attribute;            }            objDS.WriteXml(sw, System.Data.XmlWriteMode.WriteSchema);            SqlCommand objCom = new SqlCommand();            objCom.Connection = objCon;            objCom.CommandType = CommandType.StoredProcedure;            objCom.CommandText = "sp_UpdateXML";	            objCom.Parameters.Add( new SqlParameter( "@empdata",                    System.Data.SqlDbType.NText));            objCom.Parameters[0].Value = sb.ToString();;            objCom.ExecuteNonQuery();        }        static void CreateDataSetFromEmployee( DataSet objDS,         SqlCommand objCom1,SqlDataAdapter objAdpt1)        {            //Create related objects.            objCom1.CommandType = CommandType.Text;            objCom1.CommandText = "Select EmployeeId, FirstName,LastName from Employee";            //Fill the Orders table.            objAdpt1.SelectCommand = objCom1;            objAdpt1.TableMappings.Add("Table", "Employee");            objAdpt1.Fill(objDS);				        }    }}					
  5. 修改連接字串,使之適用於您的環境。
  6. 按下 F5 鍵以建置並執行應用程式。
  7. 按下 ENTER 鍵以關閉主控台視窗,應用程式停止執行時。
注意: 這個範例不包含任何錯誤處理。

back to the top
参考
如需有關使用.NET 受管理的提供者的詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
313480.NET 資料提供者的資訊: 藍圖
back to the top

警告:本文為自動翻譯

內容

文章識別碼:315968 - 最後檢閱時間:12/26/2003 23:22:43 - 修訂: 3.5

Microsoft ADO.NET 1.1, Microsoft ADO.NET 1.0, Microsoft Visual C# .NET 2003 標準版, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 2000 64-bit Edition

  • kbmt kbhowtomaster kbsqlclient kbstoredproc kbsystemdata KB315968 KbMtzh
意見反應
"76500"; var Ctrl = ""; document.write("