调用存储过程不返回任何内容
Posted
技术标签:
【中文标题】调用存储过程不返回任何内容【英文标题】:call to stored procedure returns nothing 【发布时间】:2010-09-17 17:09:33 【问题描述】:我正在像这样在 sql server 上调用一个存储过程:
SqlConnection conn = new SqlConnection();
SqlCommand cmd;
XmlDocument xmlDocument;
XmlReader xr;
XmlNode node;
SqlDataReader rdr = null;
try
xmlDocument = new XmlDocument();
conn.ConnectionString = "Data Source=test;Initial Catalog=teste;Integrated Security=SSPI;";
cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "[dbo].[spSearchKeywords]";
cmd.Parameters.Add(new SqlParameter("@VALUE", "XPT"));
conn.Open();
xr = cmd.ExecuteXmlReader();
conn.Close();
node = xmlDocument.ReadNode(xr);
它连接并执行命令,但是它什么也不返回 有数据要返回且参数正确(当我在sql中调用具有相同参数的过程时,它会返回一个结果)
这里是过程:
ALTER PROCEDURE [dbo].[spSearchKeywords]
(
@VALUE NVARCHAR(50) = NULL,
@ACCOUNTGROUPID NVARCHAR(50) = NULL,
@ShortCodeId NVARCHAR(50) = NULL,
@VALUETYPE NVARCHAR(50) = NULL,
@ASSEMBLY NVARCHAR(100) = NULL,
@ASSEMBLYCONTAINSURI NCHAR (10) = NULL,
@ASSEMBLYTYPE NVARCHAR(50) = NULL
)
AS
BEGIN
SET NOCOUNT ON;
SELECT [Value]
,[AccountGroupId]
,[ShortCodeId]
,[ValueType]
,[assembly]
,[assemblyContainsUri]
,[assemblyType]
FROM [teste].[dbo].[keywords]
WHERE [Value] = ISNULL(@VALUE, [Value])
AND [AccountGroupId] = ISNULL(@ACCOUNTGROUPID, [AccountGroupId])
AND [ShortCodeId] = ISNULL(@SHORTCODEID, [ShortCodeId])
AND [ValueType] = ISNULL(@VALUETYPE, [ValueType])
AND [assembly] = ISNULL(@ASSEMBLY, [assembly])
AND [assemblyContainsUri] = ISNULL(@ASSEMBLYCONTAINSURI, [assemblyContainsUri])
AND [assemblyType] = ISNULL(@ASSEMBLYTYPE, [assemblyType])
FOR XML AUTO
END
【问题讨论】:
我同意 SLaks。 XML 和 SQL Server 是真正不应该“集成”的两件事。 【参考方案1】:在实际使用 XmlReader 之前,您不能关闭连接。尝试将conn.Close()
放在node = xmlDocument.ReadNode(xr);
下方。并考虑您的一次性数据库对象的 using
语句。
【讨论】:
我也是这么想的。很惊讶在这种情况下没有例外。 @Kirk Woll:你会抛出什么异常? @Chris,我不会抛出异常。我只是假设如果 ExecuteXmlReader 的结果依赖于打开的 SQL 连接,并且该连接首先关闭,那么框架会因此而引发异常。以上是关于调用存储过程不返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章
MS Management Studio 中的存储过程返回数据。使用 C# 调用时不返回任何数据