0

我做了一个像这样的动态存储过程

CREATE PROCEDURE [dbo].[MyProcedure]
    @pSelect nvarchar(max)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @SQL nvarchar(max)

    SET @SQL = 'select ' + @pSelect + ' from tabel1';

    EXEC (@SQL)
END

在更新我的实体数据模型时,在 context.cs 中,上述存储过程的形式为

 virtual int MyProcedure(string pSelect)
            {
                var pSelectParameter = pSelect != null ?
                    new ObjectParameter("pSelect", pSelect) :
                    new ObjectParameter("pSelect", typeof(string));

                return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("MyProcedure", pSelectParameter);
            }

从 C# 代码调用存储过程

var result = myDataModel.MyProcedure("Select * From table1").tolist();

上面的代码显示错误,因为 MyProcedure 正在返回一个整数返回类型
,所以我如何根据我传递给它的 tje 选择查询设置存储过程的返回类型

如何修改我的存储过程,使其返回类型是任何特定的表类型

4

2 回答 2

1

在这种情况下,您必须欺骗代码。

CREATE PROCEDURE [dbo].[MyProcedure]
    @pSelect nvarchar(max)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @SQL nvarchar(max)

    SET @SQL = 'select ' + @pSelect + ' from tabel1';

    EXEC (@SQL)

   --Remove the below line once you have added the stored procedure to the dbml file.
    select * from table1
END

创建sp后,拖放到c#dbml文件中。然后您可以通过删除“select * from table1”行来更改 sp。

注意:如果表 1 中没有这些列,则 select 语句中的直接值(任何数据类型)如“select 1 as colmumn1,'string' as colmumn2,cast('10/01/1900' as datetime) as colmumn3从表 1"

于 2013-09-23T04:39:30.200 回答
1

只需在参数中添加 @ 符号。

 var pSelectParameter = pSelect != null ?
                new ObjectParameter("@pSelect", pSelect) :
                new ObjectParameter("@pSelect", typeof(string));

可能这应该有效,我相信您在此参数中仅传递列名。

于 2013-09-23T04:46:43.727 回答