C# 使用C通过存储过程返回字符串
我有一个表,它有一个基于表中其他列自动生成的列。我试图使用存储过程将数据插入表中,然后返回自动生成列。在下面的存储过程中,@Num表示自动生成的列 我在这里采用的方法是将数据插入数据库。不起作用的是从Insert存储过程返回@Num。这就是我想做的。如果是,我做错了什么?如果没有,是否有其他方法来实现这一点 这是我的C。当我运行它时,returnValue返回nullC# 使用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)
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,这样你的解决方案就可以工作了。我将把你的回答记为答案。