ΔΙΑΔΙΚΑΣΙΕΣ: Εκτέλεση μαζικές ενημερώσεις και εισαγωγές χρησιμοποιώντας OpenXML με υπηρεσίες παροχής .NET στο Visual C# .NET

Για μια έκδοση του Microsoft Visual C++ .NET αυτού του άρθρου, ανατρέξτε στην ενότητα 316245 .

Αυτό το άρθρο αναφέρεται από τα παρακάτω πεδία ονομάτων βιβλιοθήκη κλάσης του Microsoft .NET Framework:

  • System.Data
  • System.Data.SqlClient

ΣΕ ΑΥΤΉΝ ΤΗΝ ΕΡΓΑΣΊΑ

Σύνοψη

Αυτό το άρθρο βήμα προς βήμα περιγράφει τον τρόπο για τη μαζική εισαγωγή και ενημερώνει με διαφορετικές υπηρεσίες παροχής δεδομένων .NET της Microsoft, χρησιμοποιώντας τη μέθοδο OpenXML . Αν και το δείγμα σε αυτό το άρθρο χρησιμοποιεί η διαχειριζόμενη υπηρεσία παροχής SqlClient, μπορείτε επίσης να χρησιμοποιήσετε το OLEDB ή διαχειριζόμενη υπηρεσία παροχής ODBC.

Απαιτήσεις

Η ακόλουθη λίστα περιγράφει το υλικού που συνιστώνται, λογισμικό, υποδομή δικτύου και τα service pack που χρειάζεστε:
  • Τα Microsoft Windows 2000 Professional, τα Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server ή Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio .NET
  • Microsoft SQL Server 2000

Δημιουργία έργου

  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]
    GO

    CREATE 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)) XMLEmployee
    WHERE 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)) XMLEmployee
    Where XMLEmployee.EmployeeId Not IN (Select EmployeeID from Employee)

    EXEC sp_xml_removedocument @hDoc
    GO

  3. Ξεκινήστε το Visual Studio .NET και στη συνέχεια να δημιουργήσετε ένα νέο έργο εφαρμογής κονσόλας στο Visual C# .NET.
  4. Αντιγράψτε και επικολλήστε τον παρακάτω κώδικα στο Class1 της εφαρμογής κονσόλας:
    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 για να κλείσετε το παράθυρο της κονσόλας, όταν διακόπτεται η εκτέλεση της εφαρμογής.
ΣΗΜΕΊΩΣΗ: αυτό το παράδειγμα δεν περιλαμβάνει οποιοδήποτε χειρισμό σφαλμάτων.

Αναφορές

Για πρόσθετες πληροφορίες σχετικά με τη χρήση υπηρεσιών παροχής διαχειριζόμενων .NET, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:

313480 ΠΛΗΡΟΦΟΡΙΕΣ: χάρτης για υπηρεσίες παροχής δεδομένων .NET
Ιδιότητες

Αναγνωριστικό άρθρου: 315968 - Τελευταία αναθεώρηση: 21 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια