Jac*_*cob 5 c# xml stored-procedures compact-framework sql-server-ce
我问过几个人为什么在存储过程中使用xml作为参数不起作用而且每个人都说,这就是它的方式.我无法相信这一点.
command.Parameters.Add("@xmldoc", SqlDbType.Xml);
Run Code Online (Sandbox Code Playgroud)
这就是编译器返回错误的地方,我不能使用NVarChar beacouse它只限于4k唱歌.XML将是完美的,因为它可以是2gig大.
为什么其他SqlDbTypes运行良好,这个重新出错?
*
错误:指定的参数超出了有效值的范围.参数名称:@xmldoc:无效的SqlDbType枚举值:25.
*
Gre*_*mer 14
它确实有效.您必须将Value设置为SqlXml而不是字符串,但可以完成.想象一下这张表:
CREATE TABLE XmlTest
(
[XmlTestId] [int] identity(1,1) primary key,
[XmlText] [xml] NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
和sproc:
CREATE PROCEDURE XmlTest_Insert
(
@XmlText xml
)
AS
INSERT INTO XmlTest (XmlText)
VALUES (@XmlText)
Run Code Online (Sandbox Code Playgroud)
现在想象一个如下控制台应用程序:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
答对了!
这是在Visual Studio 2008(.NET 3.5)中完成的,但我相信它也应该在Visual Studio 2005(2.0 Framework)中工作.