Невозможно получить C# BitArray из столбца SQL Server VARBINARY(MAX)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно получить C# BitArray из столбца SQL Server VARBINARY(MAX)

Сообщение Anonymous »

Как с помощью SQL Server и SSMS прочитать BitArray, созданный в C#, из столбца SQL Server VARBINARY(MAX)?
Некоторые люди сталкивались с этим разместил ссылки на объяснения побитовых операторов Sql Server или на статьи по нормализации баз данных. Это не ответ на этот вопрос. Я не использую битовые флаги; Я также не заинтересован в создании столбцов в таблице с миллиардами битов. Я храню C# BitArray, который может содержать от нескольких сотен до нескольких тысяч значений в поле SqlServer VARBINARY(MAX). BitArray аналогичен обычному List, за исключением того, что он оптимизирован. Я могу легко восстановить и прочитать этот битовый массив на С#. Мне интересно узнать, есть ли способ прочитать этот битовый массив внутри хранимой процедуры Sql Server и определить, является ли элемент с индексом «x» истинным или ложным. Спасибо всем, кто знает, возможно ли это, и может привести пример того, как это сделать.
Используя C#, я создаю BitArray следующим образом:
Используя C#, я создаю BitArray следующим образом:
р>
var bitArray = new BitArray(2);

Я устанавливаю биты следующим образом:
bitArray[0] = true;
bitArray[1] = false;

... и так далее.
Я отправляю битовый массив в хранимую процедуру SQL Server, где он сохраняется. в столбец VARBINARY(MAX). SqlParameter, который я создаю на C#, выглядит следующим образом:
var byteArray = new byte[2];
bitArray.CopyTo(byteArray,0);
new SqlParameter("@BitArray", SqlDbType.VarBinary) { Size=-1, Value = byteArray }

В моей хранимой процедуре я сохраняю @BitArray в столбце VARBINARY(MAX). После сохранения я могу получить значение обратно из таблицы в приложении C# и прочитать отдельные элементы true/false из восстановленного битового массива. Все работает отлично.
Я открываю SqlDataReader с помощью
SELECT MyByteArray FROM MyTable WHERE Id = @MyId

Я получаю массив байтов в устройстве чтения данных и преобразую его в массив битов:
Byte[] myByteArray = (byte[])reader.GetValue(0);
BitArray myReconstitutedBitArray = new BitArray(myByteArray)

Затем я могу прочитать данные из myReconstitutedBitArray и убедиться, что все работает нормально:
  • myReconstitutedBitArray[0 ] = true.
  • myReconstitutedBitArray[1] = false.
и так далее. Все работает нормально.
Проблема в том, что в SQL Server мне нужно иметь возможность читать из MyTable.MyByteArray и видеть отдельные значения true/false, но я не могу. Все возвращает ложь. Я использую SQL Server 2022, поэтому использую метод GET_BIT, но он для всех случаев возвращает false. Независимо от того, что я помещаю в позицию индекса, оно возвращает false. Я знаю, что поле имеет правильные значения, поскольку я могу прочитать их на C#.
Как я могу прочитать эти значения в SQL Server?
Каждый такой вызов возвращает false, хотя я знаю, что этот бит равен true, и вижу истинное значение в C#:
SELECT GET_BIT(MyByteArray, 0) FROM MyTable WHERE MyId = @MyId
SELECT GET_BIT(MyByteArray, 1) FROM MyTable WHERE MyId = @MyId


Подробнее здесь: https://stackoverflow.com/questions/783 ... max-column
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Невозможно получить C# BitArray из столбца SQL Server VARBINARY(MAX)
    Anonymous » » в форуме C#
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Сохранить asp:Image ImageUrl как byte[]? в базу данных SQL Server VARBINARY(MAX)
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Сохранить asp:Image ImageUrl как byte[]? в базу данных SQL Server VARBINARY(MAX)
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как я могу создать TAR -файл в памяти из нескольких столбцов Varbinary (MAX), хранящихся в SQL Server с использованием N
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как я могу создать TAR -файл в памяти из нескольких столбцов Varbinary (MAX), хранящихся в SQL Server с использованием N
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»