繁体   English   中英

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

[英]Failed to convert parameter value from a Int64 to a Byte[]

我收到错误消息:

无法将参数值从Int64转换为Byte []。

这是我在做什么...

我的数据库中有一个带有列的表:

sessionid | binary(32) | null

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

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

SessionId是从接口继承的属性:

long? SessionId { get; set; }

在我的User类中可以访问它:

[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);

有任何想法吗? 谢谢。

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

顺便说一句,为什么首先要这样做? SQL具有日期时间类型; 您可以像这样存储它。

(您可以以相反的方式处理它,而是将long转换为一个八字节的数组并将其传递,但​​是没有可以想到的原因想要以这种方式存储它。)

ToBinary不执行您认为的操作。

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

你想做什么?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM