私は次の方法を持っています:
public static T ExecuteScalar<T>(
string query,
SqlConnection connection,
params SqlParameter[] parameters) where T : new()
{
// Create SqlCommand
SqlCommand command = CreateCommand(query, connection, parameters);
// Execute command using ExecuteScalar
object result = command.ExecuteScalar();
// Return value as expected type
if (result == null || result is DBNull) return default(T);
return (T)result;
}
MIN_ACTIVE_ROWVERSION
データベースの を として持ちたいですulong
。奇妙なことに..以下の最初のメソッド呼び出しはエラーを生成しますが、2 番目のメソッド呼び出しは正常に動作します。
メソッド呼び出し 1はエラーを生成します。
ulong minActiveRowversion =
SqlUtils.ExecuteScalar<ulong>(
"SELECT CAST(MIN_ACTIVE_ROWVERSION() AS BIGINT)"
, _connectionString);
エラー:
System.InvalidCastException: Specified cast is not valid.
メソッド呼び出し 2は正常に動作します。
ulong minActiveRowversion =
(ulong)SqlUtils.ExecuteScalar<long>(
"SELECT CAST(MIN_ACTIVE_ROWVERSION() AS BIGINT)"
, _connectionString);
command.ExecuteScalar()
メソッドの結果が次のようになるため、それがどのように可能かわかりません。
object result | 1955612
result.GetType() | {Name = "Int64" FullName = "System.Int64"}
- 最初のシナリオが不可能で、2 番目のシナリオが機能する理由を教えてもらえますか?
- シナリオ1を使用できるように、それを解決する方法を誰かに教えてもらえますか.