不能将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;
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...