我问过几个人为什么在存储过程中使用 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/