Невозможно передать guid в качестве уникального идентификатора хранимой процедуре - PullRequest
0 голосов
/ 30 мая 2011

У меня есть хранимая процедура, которая принимает уникальный идентификатор в качестве параметра.

Он должен работать так (я этого не писал):

SqlCommand command = new SqlCommand("[CheckActivation]", Conn)
{
    CommandType = CommandType.StoredProcedure
};
command.Parameters.AddWithValue("@key", key);
return (bool)command.ExecuteScalar();

где ключ - строка, но это не так. Я всегда получаю исключение «Указанный актер недействителен».

Поэтому я переписал это на:

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 со значением correnct, но я все еще получаю то же исключение.

Что здесь происходит не так?

Решение: проблема была приведена в операторе return. Sp возвращает значение типа int, которое не может быть преобразовано в bool:

return ((int) command.ExecuteScalar () == 1);

Ответы [ 4 ]

1 голос
/ 30 мая 2011

Я думаю, что вы имеете в виду @key вместо @activationkey.Затем вы можете добавить такой параметр:

command.Parameters.Add(new SqlParameter 
  {
     ParameterName = "@key",
     SqlDbType = SqlDbType.UniqueIdentifier,
     Value = new Guid(key)
  });
1 голос
/ 30 мая 2011

ExecuteScalar () не возвращает тип bool:

Тип: System.Object

Первый столбец первой строки в наборе результатовили нулевая ссылка (Ничего в Visual Basic), если набор результатов пуст.Возвращает максимум 2033 символа.

Кроме того, вы создаете параметр с именем «@key», а затем используете другое имя в этой строке:

 command.Parameters["@activationkey"].Value = guid;
0 голосов
/ 30 мая 2011

«Указанное приведение неверно» означает, что вы выполняете приведение неверно, и это единственное место, где вы делаете это:

return (bool)command.ExecuteScalar();

Проверьте это значение. Либо это DBNull, либо другой тип данных. Попробуйте отладить его, чтобы узнать тип данных.

0 голосов
/ 30 мая 2011

Вы указываете параметр "@key", как тип уникального идентификатора,

, затем вы устанавливаете guid для параметра "@activationkey", который не был объявлен.

Я думаючто вместо установки значения "@activationkey" это будет key

command.Parameters["@key"].Value = guid;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...