私も似たような経験があり、これが私がそれを管理した方法です。
以下SqlDbType.NVarChar
の代わりに使用SqlDbType.Xml
DataSet dsWithSomeTable=new DataSet("NameSpace");
tblTable.TableName="Table";
dsWithSomeTable.Tables.Add(tblTable);
SqlParameter xml = new SqlParameter
{
ParameterName = "@XML",
SqlDbType = SqlDbType.NVarChar,
Value = dsWithSomeTable.GetXml()
};
もう一方のストアド プロシージャでは、XML 型に変換して処理します。
-- =============================================
-- Description: Inserts records from CE device
-- =============================================
CREATE PROCEDURE [Inventory].[uspCEInserXML]
@XML NVARCHAR(MAX) = NULL
AS
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
--Receives parameter as NVarchar since the CE environment doesnt support XML type param
--and converting into XML
DECLARE @CXML XML=CAST(@XML AS XML)
SELECT
XTab.value('Col1[1]','int') AS[Col1],
XTab.value('Col2[1]','int') AS[Col2],
XTab.value('Col3[1]','float') AS[Col3]
INTO #TMP
FROM @CXML.nodes('NameSpace/Table') XTab([XTab])
END
GO