我正在从存储过程创建aspx表单生成器,我有像
这样的存储过程CREATE PROCEDURE [dbo].[OU_Test_ALL]
@ID_Login uniqueidentifier = null,
@ID int = null
AS
BEGIN
declare @Error int, @Message varchar(500), @SQL varchar(max)
set @Message = 'Error'
exec @Error=dbo.CheckPermissions @ID_Login=@ID_Login, @ID=@ID, @ID_Action='OU_Test_ALL'
begin
goto FAILED
end
select
OU_Test.Value1Int,
OU_Test.Value2Varchar,
OU_Test.Value3Bit,
OU_Test.Value4Varchar,
OU_Test.Value5Int
from OU_Test
where (@ID is null or OU_Test.ID=@ID)
return 0
FAILED:
raiserror (@Message, 16, 1)
return 1
END
我需要在不调用它的情况下读取结果。
我能够使用
在Management Studio中获取一些元数据SET FMTONLY ON;
exec OU_Test_ALL
SET FMTONLY OFF;
,但我无法在C#应用程序中读取此元数据。
有没有办法在不调用存储过程的情况下读取结果列?
答案 0 :(得分:0)
这是致电stored procedure
:
SqlCommand command = new SqlCommand("SET FMTONLY ON; exec sp_sptest; SET FMTONLY OFF;"
, connection);
command.Connection.Open();
var reader = command.ExecuteReader();
DataTable resultTable = new DataTable();
resultTable.Load(reader);
command.Connection.Close();
列已归档,您可以看到列类型,名称等。行未填充。
答案 1 :(得分:0)
我建议使用SqlDataReader.GetSchemaTable方法。使用SET FMTONLY ON;
调用您的存储过程,该结构将在DataTable
返回的GetSchemaTable()
中提供。
或者,SqlCommand
SET FMTONLY
方法有一个重载,如果您传入SchemaOnly
的{{3}},则会为您处理SqlDataReader _Reader = null;
_Reader = _Command.ExecuteReader(CommandBehavior.SchemaOnly);
DataTable _Schema = _Reader.GetSchemaTable();
。
有些事情:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
For Each lbl In Me.Controls.OfType(Of Label)()
MessageBox.Show(lbl.Name)
MessageBox.Show(lbl.Text)
Next
End Sub