Sqlparameter.Dbtype.Xml在.net紧凑框架中给出错误

时间:2013-06-04 21:32:29

标签: c# sql .net-cf-3.5

我正在开发一个用于Windows CE的应用程序并尝试访问SQL Server中的存储过程。

我需要传递XML参数,但它给我以下运行时异常:

Invalid SqlDbType enumeration value: 25

在这一行:

SqlParameter XMLDoc = new SqlParameter("@XMLDoc", SqlDbType.Xml);

相同的代码在普通的.net框架中工作,所以我猜它是特定于紧凑框架的东西。

msdn表示它支持紧凑框架。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我有类似的经历,这就是我管理它的方式。

使用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