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

时间:2014-06-10 17:35:14

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

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

我在这里采用的方法适用于将数据插入数据库。什么不起作用是从@Num存储过程返回Insert。是我想做的事情。如果是这样,我做错了什么?如果没有,是否有另一种方法可以实现这一目标?

这是我的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]))
)

1 个答案:

答案 0 :(得分:2)

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

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'

Result