繁体   English   中英

无法转换'SingleResult'类型的对象

[英]Unable to cast object of type 'SingleResult'

在linq中调用存储过程时出错到sql,MVC 3.我只是从SP中检索单个整数,就像选择查询的COUNT结果一样。

错误:

System.InvalidCastException: Unable to cast object of type 'SingleResult`1[EmployeeAttendance_app.Models.GetUser_PwdResult]' to type 'System.IConvertible'.

Source Error: 


Line 26:         public ActionResult AfterLogIn(int EmplID, String EmpPwd) 
Line 27:         {
Line 28:             int Num_Rows = Convert.ToInt32(DataContext.GetUser_Pwd(EmplID, EmpPwd));
Line 29:             if (Num_Rows == 1) 
Line 30:             {

码:

public ActionResult AfterLogIn(int EmplID, String EmpPwd) 
        {
            int Num_Rows = Convert.ToInt32(DataContext.GetUser_Pwd(EmplID, EmpPwd));
            if (Num_Rows == 1) 
            {
                ViewBag.Message = "Logged In";
            }
            else
            {
                ViewBag.Message = "Log-in Failed";
            }
            return View();
        }

SP:这个SP我实际上是从Code调用的,

CREATE PROCEDURE GetUser_Pwd
  @EmplID int,
  @EmplPwd varchar(50)

As  
BEGIN

    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    Declare @No_Rows int
    Select No_Rows= count(*) from HrEmployee where EmplID = @EmplID AND PassWord = @EmplPwd
    Return @No_Rows
END
GO

如果您将查看GetUser_Pwd方法签名,您将看到它返回ISingleResult<GetUser_PwdResult> 这就是Linq To Sql如何从存储过程返回数据 - 生成包含结果集中所有字段的新类。 即使您将使用存储过程,该过程从映射到数据模型中的实体的表返回数据,也将生成包含表中所有字段的新StoredProcedureNameResult类型。 因此, GetUser_PwdResult对象将如下所示:

public partial class GetUser_PwdResult
{
    public Nullable<int> No_Rows { get; set; }
}

这里的问题是这个类和GetUser_PwdResult对象的集合都不能转换为整数。 所以你的转换失败了。

因此,您知道结果集合中只有一个返回的对象,您可以从集合中获取第一个项目并读取其No_Rows值:

int? Num_Rows = DataContext.GetUser_Pwd(EmplID, EmpPwd).First().No_Rows;

DataContext.GetUser_Pwd()函数不返回int ,(或者你可以转换为int东西),它返回一个SingleResult

您可以尝试查看它是否为null ,而不是尝试将其强制转换为int

var result = DataContext.GetUser_Pwd(EmplID, EmpPwd);
if (result != null) { 
    // logged in
}

编辑以反映更新的问题:

您的SingleResult应包含查询中选择的字段:

var result = DataContext.GetUser_Pwd(EmplID, EmpPwd).First();
if (result.No_Rows == 1) { 
    // logged in
}    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM