看看这段代码:
public long my_function()
{
return bdd.Database.SqlQuery<long>("SELECT count(*) FROM mytable")).First();
}
此代码在mysql数据库上运行良好。
但是如果我在sql server数据库上运行相同的代码,我会收到此错误:
Erreur: The specified cast from a materialized 'System.Int32' type to the 'System.Int64' type is not valid.
如果我将代码更改为:
,我可以使用public int my_function()
{
return bdd.Database.SqlQuery<int>("SELECT count(*) FROM mytable")).First();
}
实际上,我认为sql server使用int32表示count(*)返回值而mysql使用的是int64。 EF和C#无法将int32转换为int64(奇怪?)
你之前有没有注意到这一点?
我想知道如果我的计数(*)超过int32容量会发生什么...... (一个有很多记录)
由于
答案 0 :(得分:0)
在SQL Server COUNT
中返回一个SQL INT,它映射到.Net中的Int32
。如果您需要更大的值,则需要使用COUNT_BIG
来自文档:
COUNT_BIG始终返回bigint数据类型值。 COUNT始终返回int数据类型值。
答案 1 :(得分:0)
你之前有没有注意到这一点?
是强>
我想知道如果我的计数(*)超过int32会发生什么 能力......(有很多记录)
算术溢出错误
如果您担心自己拥有的记录数量,请尝试此操作:
public long my_function()
{
return bdd.Database.SqlQuery<long>("SELECT COUNT_BIG(*) FROM mytable")).First();
}