微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不能将guid作为唯一标识符传递给存储过程

如何解决不能将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 举报,一经查实,本站将立刻删除。