如何解决不能将guid作为唯一标识符传递给存储过程
|| 我有一个将uniqueidentifier作为参数的存储过程。 它应该像这样工作(我没有写这个):sqlCommand command = new sqlCommand(\"[CheckActivation]\",Conn)
{
CommandType = CommandType.StoredProcedure
};
command.Parameters.AddWithValue(\"@key\",key);
return (bool)command.ExecuteScalar();
其中key是字符串,但不是。我总是收到“指定的转换无效”的异常。
因此,我将其重写为:
Guid guid = new Guid(key);
using (var command = Conn.CreateCommand())
{
command.CommandText = \"[CheckActivation]\";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(\"@key\",sqlDbType.UniqueIdentifier);
command.Parameters[\"@key\"].Value = guid;
return (bool)command.ExecuteScalar();
}
guid是具有正确值的Guid对象,但是我仍然遇到相同的异常。
这是怎么了?
解决方案:问题在于return语句中的强制类型转换。 sp返回一个不能转换为布尔值的int值:
return((int)command.ExecuteScalar()== 1);
解决方法
“指定的转换无效”是指您的转换错误,这是您执行此操作的唯一位置:
return (bool)command.ExecuteScalar();
检查此值。它是DBNull还是其他数据类型。尝试对其进行调试,以找出数据类型。
, ExecuteScalar()不返回布尔类型:
类型:System.Object
第一行的第一列
结果集或空引用
(在Visual Basic中为空)如果
结果集为空。返回最大值
2033个字符。
同样,您创建名称为\“ @ key \”的参数,然后在此行中使用其他名称:
command.Parameters[\"@activationkey\"].Value = guid;
, 我认为您的意思是@key
而不是@activationkey
。然后,您可以添加这样的参数:
command.Parameters.Add(new SqlParameter
{
ParameterName = \"@key\",SqlDbType = SqlDbType.UniqueIdentifier,Value = new Guid(key)
});
, 您将参数“ 7”指定为唯一标识符类型,
则将guid
设置为未声明的参数\"@activationkey\"
。
我认为您不应该将值设置为\"@activationkey\"
,而应将其设置为key
command.Parameters[\"@key\"].Value = guid;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。