无法将参数值从Int64转换为字节[]

时间:2010-01-18 22:45:32

标签: c# types

我收到错误:

  

无法转换参数值   Int64到字节[]。

这是我正在做的......

我的数据库中有一个表格,其中包含以下列:

sessionid | binary(32) | null

当我分配给它时,我这样做:

user.LastActivityDate = DateTime.Now;
user.SessionId = user.LastActivityDate.ToBinary();

SessionId是接口的继承属性:

long? SessionId { get; set; }

在这里,我的用户类正在访问它:

[SettingsAllowAnonymous(false), CustomProviderData("SessionId;string")]
public long? SessionId { get { return base["SessionId"] as long?; } set { base["SessionId"] = value; } }

在我的自定义配置文件提供程序中,以下命令指定值:

sqlCommand.Parameters.Add("sessionid", SqlDbType.Binary, 32).Value = settingsPropertyValue.PropertyValue;

当“sqlCommand.ExecuteNonQuery()”命令执行存储的更新时 使用参数:

执行过程
@sessionid binary(32)

结果是错误:

  

“无法转换参数值   从Int64到Byte []。“

我试过了:

  1. ... = Convert.ToByte(settingsPropertyValue.PropertyValue);
  2. ... = Convert.ToInt64(settingsPropertyValue.PropertyValue);
  3. 有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:0)

SqlDbType.Binary不正确(当你添加参数时) - 这是任意长度的扩展二进制数据。您只想将其表示为64位整数,即SqlDbType.BigInt

顺便问一下,你为什么要这样做呢? SQL有一个日期时间类型;你可以像那样存放它。

(你可以用相反的,反常的方式来解决这个问题,而是将长数据转换成8字节的数组并传递它,但是没有想象的理由你想以这种方式存储它。)

答案 1 :(得分:0)

ToBinary没有按照您的想法行事。

DateTime.ToBinary方法返回long值,而不是字节数组。

你想做什么?

如果您尝试存储日期时间,则应使用DataTime列。

如果您确实需要字节数组,请提供更多详细信息。