ASP.NET postgresql NpgsqlDbType.Bit не поддерживает BitArray? - PullRequest
0 голосов
/ 20 декабря 2018

Обнаружена ошибка типа, которая, кажется, противоречит документам ...

Создана таблица postgresql на моем локальном компьютере с 2 столбцами (SystemID [как uuid], TrackingIDs [как бит [] с размером 256)]).

В C # ASP.NET я получаю сообщение об ошибке:

42804: столбец "TrackingIDs" имеет тип bit [], но выражение имеет тип bit

Я не вижу опции для "NpgsqlDbType.BitArray", но в документах говорится, что "NpgsqlDbType.Bit" должен принимать тип объекта C # BitArray: https://www.npgsql.org/doc/types/basic.html

Вот пример моего C #код:

using (var connection = new NpgsqlConnection(DBUtils.connectionString))
{
    try
    {
        connection.Open();
        using (var cmd = connection.CreateCommand())
        {
            cmd.CommandText = "INSERT INTO hosts VALUES(@SystemID, @TrackingIDs)";
            cmd.Parameters.AddWithValue("@SystemID", NpgsqlDbType.Uuid, systemID);
            cmd.Parameters.AddWithValue("@TrackingIDs", NpgsqlDbType.Bit, new BitArray(256));
            return cmd.ExecuteNonQuery() != 0 ? "Success" : "Failed";
        }
    }
    catch (Exception ex)
    {
        return ex.Message;
    }
    finally
    {
        connection.Close();
    }
}

pgAdmin4: 3.6
Версия Npgsql: 4.0.4
Версия PostgreSQL: 11.1
Операционная система: Win10 x64
ASP.NET: .NET Core 2.2

РЕДАКТИРОВАТЬ: отсутствует "NpgsqlDbType.Bit | NpgsqlDbType.Array".Однако теперь я получаю:

22026: длина строки битов 1 не соответствует типу бит (256)

1 Ответ

0 голосов
/ 20 декабря 2018

Таким образом, бит в PostgreSQL может быть любого размера или может восприниматься как множественное число.Думал в терминах немного от байта, например.Поэтому решение состоит в том, чтобы просто создать столбец типа «бит» длиной 256. Затем я могу установить для него BitArray (256).

...