Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#.net从具体化的';System.Int32';键入';System.Int64';类型无效_C#_.net_Sql Server - Fatal编程技术网

C#.net从具体化的';System.Int32';键入';System.Int64';类型无效

C#.net从具体化的';System.Int32';键入';System.Int64';类型无效,c#,.net,sql-server,C#,.net,Sql Server,C#/.Net 4.6.1/Visual Studio 2017 我对MS SQL查询有问题。该查询跨两个数据库(在同一服务器上)连接多个表。结果进入“对象”列表。我得到的例外是: 指定的强制转换来自具体化的“System.Int32” “System.Int64”类型的类型无效 我已经看到了关于这个和类似错误的其他SO问题,但我没有看到这里的问题personId是一个长字符。所有的…Id字段在数据库中为bigint,在模型中为long 查询是: try { var personId =

C#/.Net 4.6.1/Visual Studio 2017

我对MS SQL查询有问题。该查询跨两个数据库(在同一服务器上)连接多个表。结果进入“对象”列表。我得到的例外是:

指定的强制转换来自具体化的“System.Int32” “System.Int64”类型的类型无效

我已经看到了关于这个和类似错误的其他SO问题,但我没有看到这里的问题
personId
是一个长字符。所有的
…Id
字段在数据库中为
bigint
,在模型中为
long

查询是:

try {
    var personId = GetPersonId(netid);

    var personIdParam = new SqlParameter {
        Value = personId,
        DbType = DbType.Int64,
        ParameterName = "PERSONID"
    };

    using (var pdb = new PersonnelContext()) {
        var foo = pdb.Database.SqlQuery<PersonToSpaceInfo>(@"
        SELECT
               'Member',
               sGroup.GroupId,
               sGroup.PersonnelGroupId,
               sGroup.Name,
               Space.SpaceId,
               Space.RoomId,
               SiteSpaceUse.TypeDescription
        FROM
             Personnel.Personnel.Memberships AS Memberships
             INNER JOIN Space.dbo.Person AS Person
                 ON Memberships.PersonId = Person.PersonnelPersonId
                    AND Person.PersonnelPersonId = @PERSONID
             INNER JOIN Space.dbo.[Group] AS sGroup
                 ON Memberships.GroupId = sGroup.PersonnelGroupId
             INNER JOIN Space.dbo.GroupList AS GroupList
                 ON sGroup.GroupId = GroupList.GroupId
             INNER JOIN Space.dbo.Space AS Space
                 ON GroupList.SpaceId = Space.SpaceId
                    AND Space.IsActive = 1
             INNER JOIN Space.dbo.SiteSpaceUse AS SiteSpaceUse
                 ON Space.SpaceId = SiteSpaceUse.SpaceId
        WHERE  GETDATE() BETWEEN Memberships.StartDate 
                         AND ISNULL(Memberships.EndDate, GETDATE())
        ",
            personIdParam).ToList();
    }
} catch (Exception e) {
    throw new Exception("get group list failed: " + e.Message);
}
堆栈跟踪:

at System.Data.Entity.Core.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader,Int32序数)
lambda_法(闭合、整形器)
在System.Data.Entity.Core.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper-Shaper)
位于System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.SimpleNumerator.MoveNext()
位于System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
位于System.Collections.Generic.List`1..ctor(IEnumerable`1集合)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
在C:\Users\me\Projects\MyProject\Controllers\HomeController.cs中的MyProject.Controllers.HomeController.GetUserActiveGroups(字符串用户)处:第560行
编辑


stacktrace中的第560行是上面的
var foo=pdb.Database…
GetPersonId()
返回
long

模型是使用代码优先接口创建的。以下是@mjwills请求的模型片段

GroupList.GroupId/ GroupList.SpaceId

public partial class GroupList {
    public long GroupId { get; set; }
    public long SpaceId { get; set; }
    ...
}
Memberships.GroupId/ 会员资格

public partial class Membership {
    public long PersonId { get; set; }
    public long GroupId { get; set; }
    ...
}
Person.personalpersonid

public partial class Person {
    public long PersonId { get; set; }
    public long PersonnelPersonId { get; set; }
    ...
}
SiteSpaceUse.SpaceId

public partial class SiteSpaceUse {
    public long SpaceId { get; set; }
    ...
}
Space.SpaceId

public partial class Space 
    public long SpaceId { get; set; }
    public long BuildingId { get; set; }
    ...
}
sGroup.GroupId/ sGroup.PersonnelGroupId

public partial class Group {
    public long GroupId { get; set; }
    public long PersonnelGroupId { get; set; }
    ...
}
编辑2 只是尝试用一个有效的三位数替换查询中的
SqlParameter
,我仍然得到错误。查询在SQLServerManagementStudio中工作。我将删除模型和连接字符串信息,然后重新创建,看看会发生什么


发生的是注意到变化…

我修复了它。事实证明,其中一个DB上下文连接指向生产DB服务器。生成的错误消息没有帮助。

这发生在哪一行?var personId=GetPersonId(netid)的作用是什么实际返回(int32或int64)?stacktrace中的第560行是上面的
var foo=pdb.Database.SqlQuery(…)
GetPersonId
returnd
long
。您能通过声明personId是long吗?是的。更改
var personId=GetPersonId(netid)
长人形;personId=GetPersonId(netid)编译并运行,同一个异常被抛出到同一个位置。@ClayVerValen:我没有看到与我的模型关联的XML文件。如果有区别的话,这些都是代码优先。如果你感兴趣的文件有一个特定的名字或应该住在一个特定的地方,请让我知道。我使用winGrep搜索

public partial class Group {
    public long GroupId { get; set; }
    public long PersonnelGroupId { get; set; }
    ...
}