[英]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 []。
我努力了:
有任何想法吗? 谢谢。
SqlDbType.Binary
是不正确的(添加参数时)-用于任意长度的扩展二进制数据。 您只想将其表示为64位整数,即SqlDbType.BigInt
。
顺便说一句,为什么首先要这样做? SQL具有日期时间类型; 您可以像这样存储它。
(您可以以相反的方式处理它,而是将long转换为一个八字节的数组并将其传递,但是没有可以想到的原因想要以这种方式存储它。)
ToBinary
不执行您认为的操作。
DateTime.ToBinary
方法返回一个long
值,而不是字节数组。
你想做什么?
如果您要存储日期时间,则应仅使用DataTime列。
如果您确实需要字节数组,请提供更多详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.