2014-04-01 106 views
-1

我有asp.net的MVC 4项目中,尝试调用T-SQL,我需要选择一些行与并非所有列问题在asp.net mvc的SP

CREATE PROCEDURE [dbo].[SP_name] 
@iSkip int, @iTake int 
    AS 
    BEGIN 
    SELECT [Column1], [Column2], [Column3] FROM [dbo].[Table] WITH(NOLOCK) 
    ORDER BY 
    [Column1] DESC 
OFFSET @iSkip ROWS 
FETCH NEXT @iTake ROWS ONLY 
    END 

但是,当我尝试调用该SP从代码中我有以下错误

The data reader is incompatible with the specified 'Model.Table'. A member of the type, 'Column4', does not have a corresponding column in the data reader with the same name. 

当我试图把这种对MS SQL工作室一切正常,没有任何人知道哪里是我的错?我该怎么做?

编辑:

这是库:

public IEnumerable<T> GetAllEntitiesWithParam(string procedureName, int param1, int param2) { 
      return _context.DbContext.Database.SqlQuery<T>("EXEC " + procedureName + " @param1, @param2", new SqlParameter("param1", param1), new SqlParameter("param2", param2)); 
     } 

这里是内部代码:

IEnumerable<Table> list = _myRepo.GetAllEntitiesWithParam("SP_name", par1, par2); 
+4

您将需要显示用于调用存储过程的代码。 – Paddy

+0

@Paddy更新我的问题 – BorHunter

+0

它说'Column4'不存在。更新你的查询并在选择中添加'[Column4]',并检查 – Bharadwaj

回答

1

的错误似乎很清楚 - 你有你的模型Column4那不在该sproc的结果集中。您可以为存储过程添加“默认”值:

CREATE PROCEDURE [dbo].[SP_name] 
@iSkip int, @iTake int 
    AS 
    BEGIN 
    SELECT [Column1], 
      [Column2], 
      [Column3], 
      NULL AS [Column4]  // <---------------- 
    FROM [dbo].[Table] WITH(NOLOCK) 
    ORDER BY 
    [Column1] DESC 
OFFSET @iSkip ROWS 
FETCH NEXT @iTake ROWS ONLY 
    END 
+0

如果我把这个列作为SELECT [Column1 ],[Column2],[Column3],[Column4]? – BorHunter

+0

@BorHunter号在这种情况下,你会得到'Column4'中的任何值。 –

+0

我的意思是生产力方面,而不是数据方面。 – BorHunter