[英]Using LINQ to get values from Stored Procedure
我正在使用LINQ和DataContext检索我的数据。 我不使用实体框架。 现在我有一个不知道的存储过程
存储过程是通过以下方式定义的:
CREATE PROCEDURE [dbo].[spGetConvertedFieldValue]
-- Add the parameters for the stored procedure here
@Table NVARCHAR(50),
@Field NVARCHAR(50),
@Key NVARCHAR(50),
@KeyValue NVARCHAR(500)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'SELECT ' + @Field + ' FROM ' + @Table + ' WHERE ' + @Key + ' = ''' + @KeyValue + ''''
EXEC(@SQL)
END
如您所见,这是一个非常通用的存储过程! 这样做的原因是,我有另一个表,可以在其中输入上述值,并且系统将能够建立我的最终结果。
但是我有点库存。 我已阅读以下文章: http : //www.codeproject.com/Articles/37938/Simple-6-steps-to-use-stored-procedure-in-LINQ ,其中指定了如何调用存储过程。 但是有一件事是,看来我至少应该能够定义我要引用的表(步骤2)
此外,以上文章没有描述如何添加参数。
如果可以通过不使用存储过程来创建结果,那也是一种选择!
好的,这是解决方法:
首先,我创建一个名为TemporaryParking的新表:
CREATE TABLE [dbo].[TemporaryParking](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Field] [nvarchar](max) NULL,
CONSTRAINT [PK_TemporaryParking] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 10) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
接下来,我创建一个存储过程,该过程可以对我的表进行填充并返回新插入值的ID:
CREATE PROCEDURE [dbo].[spGetConvertedFieldValue]
-- Add the parameters for the stored procedure here
@Table NVARCHAR(50),
@Field NVARCHAR(50),
@Key NVARCHAR(50),
@KeyValue NVARCHAR(500)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'INSERT INTO TemporaryParking (Field) SELECT ' + @Field + ' FROM ' + @Table + ' WHERE ' + @Key + ' = ''' + @KeyValue + ''''
EXEC(@SQL)
RETURN @@Identity
END
在我的应用程序中,我创建了一个.dbml文件,该文件“包含”我的存储过程spGetConvertedFieldValue。
调用此过程时,它将从插入的值中返回Id,然后我可以创建一个简单的LINQ语句来获取该值:
'lets assume that I now have the Id in a variable calle tmpId
var rv = (from f in _db.TemporaryParking
where f.Id == tmpId
select f.Field).First();
如果需要,我什至可以通过再次删除TemporaryParking中的值来进行清理。
谢谢Thorsten Dittmar为我指出正确的方向! 您的答案并不能解决所有问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.