???? ID: 315968 - ????? ???????: 04 ?????? 2010 - ??????: 2.0
TO HOW: ??????? ???? ?????? ??? ?????? ?? ????? C# .NET ??? .NET ??????? ?? ??? OpenXML ????? ???????? ???? ??
?????? ?????? This article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
?? ??? ?? ??? ???? ????? ?? ?? ???? bulk ???????? ???? ?? ?? ???? Microsoft .NET ???? ??????? ?? ??? ?????? ?? ????? ??
OpenXML ?????? ??? ?? ??? ??? ????? SqlClient ???????? ??????? ?? ????? ???? ??, ?????? ?? ?? ????? ?? ???? OLEDB ?? ODBC ???????? ????????
??????????????? ???? outlines ???????? ?????????, ??????????, ??????? ??????, ?? ???? ???? ???:
Microsoft Windows 2000 Professional, Microsoft Windows 2000 ?????, Microsoft Windows 2000 ????? ????? ?? Microsoft Windows NT 4.0 ????? Microsoft Visual Studio .NET Microsoft SQL Server 2000 ????????? ?????SQL ????? ??? ????? ??? ?? ??? ?? ?????? ?????:
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
SQL ????? ??? ????? ??? ?? ??? ??? ???????? ????????? ?????:
CREATE PROC sp_UpdateXML @empdata nText
AS
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
Visual Studio .NET ?? ??????? ????, ?? ?? ????? C# .NET ??? ??? ??? ????? ????????? ????????? ?????? ?? ????????? ????? ?? ??? ????? ??? ???????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);
}
}
}
???? ?????? ?? ??? ??????? ??????? ???????? ?? ??????? ????? ????? ?? ??? ?? ????????? ?? ????? ?? ??? F5 ????? ?????? ?? ????????? ?? ??? ????? ?????? ????? ?? ??? ???? ?? ??? ENTER ????? ?????? ???: : ?????? ?? ???? ?? ?????? ???????? ?? ????? ???? ???
.NET ???????? ??????? ?? ????? ???? ?? ???? ??? ???????? ??????? ?? ??? Microsoft ???????? ??? ???? ????? ?? ??? ????? ???? ?????? ?? ????? ????:
313480
(http://support.microsoft.com/kb/313480/EN-US/
)
???????: .NET ???? ??????? ?? ??? Roadmap
???? ???? ???? ??: Microsoft ADO.NET 1.1 Microsoft Visual C# .NET 2003 Standard Edition Microsoft Visual C# .NET 2002 Standard Edition Microsoft SQL Server 2000 Standard Edition Microsoft SQL Server 2000 64-bit Edition kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB315968 KbMthi
???? ?????? ???????? ??????????: ?? ???? ?? ???? ??????? ?? ????? ?? Microsoft ????-?????? ?????????? ?????? ?????? ???? ??? ??. Microsoft ???? ??? ????-???????? ?? ????-???????? ????? ?????? ?? ???? ???????? ???? ?? ???? ????? ????? ??? ?? ??? ?????? ?? ???? ???? ???? ??? ????? ??. ???????, ????-???????? ???? ????? ???? ???? ???? ???. ?????, ????????, ?????-???? ?? ??????? ?? ???????? ?? ???? ???, ???? ?? ??? ?????? ???? ???? ??? ????? ??? ?? ???? ??. Microsoft ??????? ??? ???? ?? ?????? ?? ??????????, ????????? ?? ??? ?????? ?? ???? ????? ?? ???? ???????? ?? ??? ???? ????? ?? ??? ????????? ???? ??. Microsoft ????-?????? ?????????? ?? ????? ?????? ?? ?? ??? ??.
?????????? ?? ??????? ????????? ??????? ??:
315968
(http://support.microsoft.com/kb/315968/en-us/
)
Was this information helpful?
How much effort did you personally put forth to use this article?
Tell us why and what can we do to improve this information
Thank you! Your feedback is used to help us improve our support content. For more assistance options, please visit the
Help and Support Home Page .
???? ?????? ???? ?????? ??????
??????
??? ?????? ??????? ????
???? ??????