SQL Server存储过程在VS c#中不返回结果,但在SQL Server中返回
本文关键字:返回 Server SQL 但在 结果 存储过程 VS | 更新日期: 2023-09-27 18:01:39
我编写了一个返回XML的存储过程。当我在SQL Server管理工作室运行存储过程时,它应该返回xml,但是,当我在c#代码中运行它时,没有返回xml。我的代码是这样的:
using (SqlConnection conn = new SqlConnection(connStr)) {
using (SqlCommand cmnd = new SqlCommand("dbo.spMyStoredProcXML", conn)) {
cmnd.CommandType = CommandType.StoredProcedure;
cmnd.Parameters.Add("@Param1", SqlDbType.VarChar, 50);
cmnd.Parameters["@Param1"].Value = "Some value";
//more parameters...
conn.Open();
XmlReader xrdr = cmnd.ExecuteXmlReader();
//do stuff...
}
}
我已经检查了我创建的用户的权限,它们看起来像这样:在服务器级别,在登录属性对话框中,在用户映射下,我已经将用户映射到正确的数据库,并"检查"了public、db_datareader、db_datawriter,然后甚至将它们添加到db_owner角色。
在数据库级别,我还进入了数据库用户对话框的"Securables"部分,并显式地授予用户Grant和With Grant权限来执行所讨论的存储过程。我还明确地为用户选择了"授予"权限来删除、插入、选择和更新数据库中的所有表。
但是,当"XmlReader xrdr = cmd . executexmlreader();"行运行时,xrdr变量为空。无错误报告。谁能告诉我还需要检查什么吗?
事先感谢您提供的任何帮助。
下面是一个简化版本的存储过程(在SQL Server Management Studio中完美地工作):
CREATE PROCEDURE [dbo].[spGetXML]
(@param1 varchar(50), @param2 varchar(1))
开始
SET NOCOUNT ON;
with xmlnamespaces ('http://schemas.xmlsoap.org/soap/encoding/' as SOAP_ENC)
select
d.Col1,
d.Col2,
from MyTable d
where d.Col1 = @param1 and
d.Col2 = @param2
FOR XML PATH('ObjectName'), root('DOCUMENT'), type
结束
我想您的StoredProcedure已经有必要的字段了。那么,试试这个:
using (SqlConnection conn = new SqlConnection(connStr)) {
conn.Open();
using (SqlCommand cmnd = new SqlCommand("dbo.spMyStoredProcXML", conn)) {
cmnd.CommandType = CommandType.StoredProcedure;
cmnd.Parameters.AddWithValue("@Param1", "Some value";)
//more parameters...
XmlReader xrdr = cmnd.ExecuteXmlReader();
//do stuff...
}
}
不妨试试:
在你的过程中,确保你的参数被定义为一个输出参数:
CREATE PROCEDURE [dbo].[MyStoredProcedure]
@Param1 xml OUTPUT
SET @Param1 = (SELECT XML from TABLE)
然后在c#代码中:
cm.Parameters.Add("@Param1", SqlDbType.Xml).Direction = ParameterDirection.Output;
Param1 = Convert.ToString(cm.Parameters["@Param1"].Value);
显然,调整您的数据类型,使其适合。此外,如果您在此过程中做了大量工作,我个人会使用ExecuteNonQuery而不是使用XMLReader