我正在制作一个Windows服务,以便能够在sql server数据库上运行(插入,编辑等)并调用Stored Procs。
但是,有没有办法让我知道SP的类型?当从C#调用时,我需要知道它是否返回1个值,或更多,或者没有(所以我可以使用executereader,scalar等)?
由于
答案 0 :(得分:0)
SqlCommand.ExecuteNonQuery()
调用非查询。但是将它作为SqlCommand.ExecuteReader()
运行是有效的。唯一的区别是第一次调用DataReader.Read()
会返回false
,表示存储过程没有返回结果集。SqlCommand.ExecuteReader()
运行。第一次调用DataReader.Read()
将返回true
。因此,您可以在所有三种情况下使用ExecuteReader
。
虽然您的问题似乎没必要,但您可以使用fmtonly选项检索结果集的元数据。该设置导致语句仅返回列信息;没有返回任何数据行。所以你可以运行:
SET FMTONLY ON;
EXEC dbo.YourProc @par1 = 1;
SET FMTONLY OFF;
从C#执行此作为CommandText
,您可以检查存储过程将返回的列名。
为了验证以这种方式运行的存储过程不会产生任何副作用,我运行了以下测试用例:
create table table1 (id int)
go
create procedure YourProc(@par1 int)
as
insert into table1 (id) values (@par1)
go
SET FMTONLY ON;
EXEC dbo.YourProc @par1 = 1;
SET FMTONLY OFF;
go
select * from table1
这没有返回任何行。因此,仅格式选项可确保不会发生实际更新或插入。