Как выбрать уникальный идентификатор SQL Server 2008 и поместить его в переменную .net Guid? - PullRequest
1 голос
/ 03 апреля 2012

У меня проблемы с ВЫБОРОМ столбца типа uniqueidentifier и помещением его в переменную типа Guid в ASP.net.

База данных генерирует uniqueidentifier, и все, что я хочучтобы сделать это вытащить их и сохранить значения в случае, если мне нужно заполнить таблицу внешнего ключа.

Я использую закрытый член для хранения значения:

Private _uniqueID as guid

I SELECT из таблицы и используйте SqlDataReader с именем vRdr.Все остальные значения выходят просто отлично, но когда я добавляю это, я получаю ошибку:

if not isDBNull( vRdr("uniqueID")) then
    _uniqueID =  vRdr.GetGuid("uniqueID")
end if

Я получаю ошибку:

Неправильная строка вводаформат.

Я не уверен, почему у меня так много проблем при попытке выбрать эти значения.Я также попытался Guid.Parse() и Guid.TryParse() на значении считывателя данных без удачи.

Спасибо за чтение.

Ответы [ 4 ]

3 голосов
/ 03 апреля 2012

Согласно документу MSDN , GetGuid () принимает порядковый номер столбца, а не строковый ключ.Измените свой код на это:

_uniqueID =  vRdr.GetGuid(vRdr.GetOrdinal("uniqueID"))
1 голос
/ 03 апреля 2012

Вы пытались создать новый Guid из значения вашей базы данных?

Пример:

_uniqueID = New Guid(vRdr("uniqueID").ToString())
0 голосов
/ 03 августа 2013

часто многие процедуры работают для многих версий .net framework. Ниже приведены два решения, которые действительно сработали для меня visual studio 2012.

  1. ViewState ("Guid variable") = ("Guid value")
  2. Dim myGuid As Guid myGuid = ("Guid value")

Первое решение сохраняет переменные данные после постбэка, а второе - нет. Наслаждайтесь!

0 голосов
/ 03 апреля 2012

Если вы вызываете GetOrdinal () в цикле (для X записей в наборе результатов), это может быть очень дорогостоящим. Вы хотели бы сохранить значение GetOrdinal () один раз и использовать повторно.

Или вы можете использовать оператор [] для IDataReader и индексировать в соответствии со строковым идентификатором для вашего столбца. Это возвращает object, но просто приводит его к Guid. Обратите внимание, что индексация по строке также вызывает GetOrdinal, по крайней мере, в SqlDataReader.

Guid myGuid = (Guid)vRdr["uniqueID"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...