使用函数返回值参数ADO.NET调用存储过程

时间:2015-05-12 19:20:03

标签: c# sql-server stored-procedures ado.net

我有这个UDF,它从GUI中收集了一些参数。

CREATE FUNCTION [dbo].[fnCreateAppoitmentXML] (@PacientID int
, @DataProgramare datetime2(7)
, @PacientNume varchar(50)
, @PacientEmail varchar(100)
, @PacientTelefon varchar(50)
, @PacientSimptome varchar(100))
RETURNS xml

AS
BEGIN


  RETURN (SELECT (SELECT
      @PacientId AS PacientId,
      @DataProgramare AS DataProgramare,
      @PacientNume AS PacientNume,
      @PacientEmail AS PacientEmail,
      @PacientTelefon AS PacientTelefon,
      @PacientSimptome AS PacientSimptome
    FOR
    xml PATH ('PacientDate'),
    TYPE)
  FOR xml PATH (''),
  ROOT ('root'))
END

从MVC 5项目我需要在SP下面调用一个XML作为参数(函数的返回类型)

@xmldoc xml
AS
BEGIN
  BEGIN TRANSACTION
    BEGIN TRY
      INSERT INTO [dbo].[ProgramareMF] (PacientID, DataProgramare, PacientNume, PacientEmail, PacientTelefon, PacientSimptome)
        (SELECT
          xmldoc.i.value('./PacientId[1]', 'int'),
          xmldoc.i.value('./DataProgramare[1]', 'datetime2(7)'),
          xmldoc.i.value('./PacientNume[1]', 'varchar(100)'),
          xmldoc.i.value('./PacientEmail[1]', 'varchar(100)'),
          xmldoc.i.value('./PacientTelefon[1]', 'varchar(100)'),
          xmldoc.i.value('./PacientSimptome[1]', 'varchar(100)')
        FROM @xmldoc.nodes('/root/PacientDate') AS xmldoc (i))
    COMMIT TRAN;
  END TRY
  BEGIN CATCH
    IF @@TRANCOUNT > 0
      ROLLBACK TRAN;
    THROW;
  END CATCH;
END

我的第一个问题是我可以在.NET中运行SP并为其提供UDF返回值作为参数。如果可以,我应该将函数的返回值存储到变量中,或者直接为SP提供UDF作为参数???

1 个答案:

答案 0 :(得分:1)

你不能发送udf。这是sql,而不是c# 但是您可以发送udf的名称及其应该获取的参数,并直接从存储过程运行它。 但是,在这种情况下,您可以一起跳过udf,只需将参数发送到存储过程。