C#/SQL - 程序中的 SqlDbType.Xml 有什么问题?

标签 c# xml stored-procedures sql-server-ce compact-framework

我问过几个人为什么在存储过程中使用 xml 作为参数不起作用,每个人都说,事实就是这样。我简直不敢相信。

command.Parameters.Add("@xmldoc", SqlDbType.Xml);

那是编译器返回错误的地方,我不能使用 NVarChar,因为它限制为 4k sings。 XML 将是完美的,因为它可以是 2gigs 大。

为什么其他 SqlDbTypes 工作正常而这个返回错误?

*

Error: Specified argument was out of the range of valid values. Parameter name: @xmldoc: Invalid SqlDbType enumeration value: 25.

*

最佳答案

它确实有效。您必须将值设置为 SqlXml 而不是字符串,但这是可以做到的。想象一下这张表:

CREATE TABLE XmlTest
(
    [XmlTestId] [int]   identity(1,1) primary key,
    [XmlText]   [xml]   NOT NULL
)

存储过程:

CREATE PROCEDURE XmlTest_Insert
(
    @XmlText    xml
)
AS

INSERT INTO XmlTest (XmlText)
VALUES (@XmlText)

现在想象一个如下所示的控制台应用程序:

using System.Data.SqlClient;
using System.Data;
using System.Data.SqlTypes;
using System.Xml;

namespace TestConsole
{
    class Program
    {

        static void Main(string[] args)
        {
            string xmlDoc = "<root><el1>Nothing</el1></root>";
            string connString = "server=(local);database=IntroDB;UID=sa;PWD=pwd";
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand("XmlTest_Insert", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter param = new SqlParameter("@XmlText", SqlDbType.Xml);
            param.Value = new SqlXml(new XmlTextReader(xmlDoc
                           , XmlNodeType.Document, null));
            cmd.Parameters.Add(param);

            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Dispose();
        }
    }
}

宾果!

这是在 Visual Studio 2008 (.NET 3.5) 中完成的,但我相当确定它也应该在 Visual Studio 2005 (2.0 Framework) 中工作。

关于C#/SQL - 程序中的 SqlDbType.Xml 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/574928/

相关文章:

c# - 在富文本框中的光标位置插入图像

c# - 如何获取字符的ASCII值

android - 如何在 Android 的 textinputLayout 中设置 * in hint

MySQL 从一系列相同值中选择第一个和最后一个记录

c# - 使用存储过程时哪种 ORM 最好

mysql - 使用MYSQL函数返回STRING类型

c# - 如何使用 ExchangeService 访问共享邮箱 (Outlook 2013)

c# - 将 DLL 从 C# 导入到 C++

sql-server - 如何使用 T-SQL 内置函数的值更新 XML 列?

objective-c - 如何获取 XML 节点的属性名称 - GDataXMLNode