Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C通过存储过程返回字符串_C#_Sql_Sql Server_Tsql_Enterprise Library - Fatal编程技术网

C# 使用C通过存储过程返回字符串

C# 使用C通过存储过程返回字符串,c#,sql,sql-server,tsql,enterprise-library,C#,Sql,Sql Server,Tsql,Enterprise Library,我有一个表,它有一个基于表中其他列自动生成的列。我试图使用存储过程将数据插入表中,然后返回自动生成列。在下面的存储过程中,@Num表示自动生成的列 我在这里采用的方法是将数据插入数据库。不起作用的是从Insert存储过程返回@Num。这就是我想做的。如果是,我做错了什么?如果没有,是否有其他方法来实现这一点 这是我的C。当我运行它时,returnValue返回null internal static bool InsertApplication(Something something)

我有一个表,它有一个基于表中其他列自动生成的列。我试图使用存储过程将数据插入表中,然后返回自动生成列。在下面的存储过程中,@Num表示自动生成的列

我在这里采用的方法是将数据插入数据库。不起作用的是从Insert存储过程返回@Num。这就是我想做的。如果是,我做错了什么?如果没有,是否有其他方法来实现这一点

这是我的C。当我运行它时,returnValue返回null

   internal static bool InsertApplication(Something something)
   {
       object returnValue;
       string sql = "usp_InsertSproc";
       returnValue = DatabaseFactory.CreateDatabase("ConnectionString").ExecuteScalar(sql, new Object[] { something.First_Name, something.Last_Name });
   //I'd like to be able to access the @Num value from the Sproc here
   }
这是我的存储过程:

ALTER PROCEDURE [dbo].[usp_InsertSproc]
(
@First_Name varchar(50),
@Last_Name varchar(50),
@Num Varchar(500) Output
)
AS
  SET NOCOUNT OFF;

  INSERT INTO [Table] ([First_Name], [Last_Name]) 
  VALUES (@First_Name, @Last_Name, )

  Return @Num
这就是我的桌子的样子

CREATE TABLE [Table]
(
   [First_Name] VARCHAR(50),
   [Last_Name] VARCHAR(50),
   [Num] AS ([dbo].[SetCMP]([Num]))
)

我假设你的桌子看起来像这样:

CREATE TABLE [Table]
(
    [First_Name] VARCHAR(50),
    [Last_Name] VARCHAR(50),
    [Num] AS [First_Name] + [Last_Name] + '!'
)
你的C应该很好。将存储过程更改为类似以下内容:

ALTER PROCEDURE [dbo].[usp_InsertSproc]
    @First_Name VARCHAR(50),
    @Last_Name VARCHAR(50)
AS
    SET NOCOUNT OFF;

    INSERT INTO [Table] ([First_Name], [Last_Name])
    OUTPUT inserted.[Num]
    VALUES (@First_Name, @Last_Name)
GO

EXEC [dbo].[usp_InsertSproc]
    @First_Name = 'Tom',
    @Last_Name = 'Hunter'

您在哪里为@Num赋值?也就是说,您应该选择@Num而不是返回它。@BrianDriscoll:如果它是一个输出参数,您还需要返回它吗?设置还不够吗?@ShaiCohen我想他的意思是选择@Num比将其作为输出参数更好。@shree.pat18将Num的生成结果添加到post中。Num将包含在returnValue变量中。这非常有效,除了@Num是由其定义中的函数生成的,这将生成以下错误消息。无法在输出子句中引用列“inserted.Cmpl_Num”,因为该列定义包含子查询或引用执行用户或系统数据访问的函数。我已经用表的样子更新了我的帖子。不过,我已经修改了我的SQL,这样你的解决方案就可以工作了。我将把你的回答记为答案。