【问题标题】:Return string via stored procedure using C#使用 C# 通过存储过程返回字符串
【发布时间】:2014-06-10 17:35:13
【问题描述】:

我有一个表,其中有一列是根据表中的其他列自动生成的。我正在尝试使用存储过程将数据插入表中,然后返回自动生成列。在下面的存储过程中,@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]))
)

【问题讨论】:

  • 你在哪里给@Num赋值?
  • 也就是说,你应该SELECT @Num而不是返回它。
  • @BrianDriscoll:如果是输出参数,还需要“返回”吗?设置还不够吗?
  • @ShaiCohen 我认为他的意思是选择 @Num 而不是将其作为输出参数是更好的方法。
  • @shree.pat18 将生成 Num 的内容添加到帖子中。

标签: c# sql sql-server tsql enterprise-library


【解决方案1】:

我假设您的表格如下所示:

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 将在您的 returnValue 变量中。
  • 这很好用,除了 @Num 是由其定义中的一个函数生成的,它会生成以下错误消息。无法在 OUTPUT 子句中引用列“inserted.Cmpl_Num”,因为列定义包含子查询或引用执行用户或系统数据访问的函数。我已经用表格的样子更新了我的帖子。
  • 没关系,我已经更改了我的 SQL,以便您的解决方案有效。我会将您的回复标记为答案。
猜你喜欢
  • 2016-05-07
  • 2011-10-19
  • 2013-06-19
  • 1970-01-01
  • 2017-08-24
  • 2012-11-18
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多