使用下面的代碼:
C#端代碼從數據表中讀取數據,並準備XML數據:
DataTable dt = new DataTable();
StringBuilder sb = new StringBuilder();
sb.Append("<R>");
for (int i = 0; i < dt.Rows.Count; i++)
{
sb.Append("<C><ID>" + dt.Rows[0].ToString() + "</ID>");
sb.Append("<N>" + dt.Rows[1].ToString() + "</N>");
sb.Append("<I>" + dt.Rows[2].ToString() + "</I></C>");
}
sb.Append("</R>");
///pass XML string to DB side
///
//sb.ToString(); //here u get all data from data table as xml format
數據庫端存儲過程(你將需要更新表名):
CREATE PROCEDURE dbo.UpdateData
-- Add the parameters for the stored procedure here
@data XML
AS
BEGIN
SET NOCOUNT ON;
-- keep data into temp table
create table #tmp_data (id nchar(2),name varchar(20), number int)
DECLARE @XMLDocPointer INT
EXEC sp_xml_preparedocument @XMLDocPointer OUTPUT, @DATA
INSERT INTO #tmp_data(id,name,number)
SELECT ID,N,I
FROM OPENXML(@XMLDocPointer,'/R/C',2)
WITH(
ID nchar(30),
N VARCHAR(20),
I int
)
EXEC sp_xml_removedocument @XMLDocPointer
begin tran
-------------------INSERT not existing ones
INSERT INTO TABLE (id,name,number)
SELECT id,name,number
FROM #tmp_data
WHERE NOT EXISTS
(
SELECT 1
FROM TABLE
WHERE ID = #tmp_data.ID
)
--- update existing ones
UPDATE TABLE
SET name = #tmp_data.name, number = #tmp_data.number
FROM #tmp_data
WHERE #tmp_data.id = TABLE.id
commit tran
if(@@error <> 0)
rollback tran
END
有人可以幫我格式化表嗎?我希望它看起來不太混亂。 – rofans91 2012-02-10 03:21:12
你說你想要一個成功的實現,但是你不能解釋*'005'的'id'究竟會發生什麼。你想覆蓋數據庫表中的數據嗎?或者只是從'DataTable'忽略它? – 2012-02-10 03:21:40
我想覆蓋它。 – rofans91 2012-02-10 03:24:40