如何将 DBObject 值转换为 long

How can convert DBObject value into long

我想将 DBObject 值转换为长整数。我在 db 中有类似 id = 24100001000001.

的值

我正在使用此代码:

String totalcount = "SELECT MAX(id) FROM table";

SqlCommand cmd1 = new SqlCommand(totalcount, con);
cmd1.ExecuteNonQuery();

long count = (long)(cmd1.ExecuteScalar());

使用此代码时出现错误:

System.InvalidCastException: sSpecified cast is not valid.

at Default.method1(Object sender, EventArgs e) in c:\Users\aBhiShEkrANAa\Desktop\ABC\Prroject\Default.aspx.cs:line 43

我只想把这个id值变成long。

它可能包含 Null 个值。所以在这种情况下最好使用 Convert 而不是 cast ,或者甚至更好地使用这样的东西:

var temp = cmd1.ExecuteScalar();
temp = (temp == DBNull.Value) ? null : temp;
long count = Convert.ToInt64(temp);

稍微简单一点的方法是为工作使用正确的类型:

var value = (long?)command.ExecuteScalar();

如果你想return默认值而不是可为空值:

var value = (long?)command.ExecuteScalar();
return value.GetValueOrDefault();

可空值将处理 DbNull,使用可空值将为其他 developers/readers.

提供更多信息

请注意 object return 下 ExecuteScalar 编辑的实际值是一个 long,使用 Convert.ToInt64 会产生很多开销,因为转换会做更多的工作。