首页 > 解决方案 > System.ArgumentException: '值类型与列类型不匹配无法存储在 BitTable_bit_col 列中。预期的类型是 BitArray。

问题描述

我在 PostgreSQL 中有一个表,它由数据类型列 BIT 组成。我只是使用 select 命令使用 C# 应用程序获取我的表的结果。

当我使用 Npgsql 版本3.1.10时,DataTable 加载操作工作正常。

但如果我使用 Npgsql 3.2.0或更高版本,则 DataTable 加载失败并出现以下错误。

System.ArgumentException:'值的类型与列类型不匹配无法存储在 BitTable_bit_col 列中。预期的类型是 BitArray。

代码片段如下。

            NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;User Id=postgres;Password=root;Database=postgres;");
            conn.Open();

            var datatable = new DataTable();

            using (var command = new NpgsqlCommand("SELECT \"BitTable\".\"id\" AS \"BitTable_id\"   ,\"BitTable\".\"bit_col\" AS \"BitTable_bit_col\"   ,\"BitTable\".\"boolean_col\" AS \"BitTable_boolean_col\" FROM \"BitTable\" AS \"BitTable\" limit 100", conn))
            {
                using (var reader = command.ExecuteReader())
                {
                    datatable.Load(reader);
                }
            }
            conn.Close();

我怀疑问题出在 DataTable 本身,令人惊讶的是它无法正确读取数据。(在 3.1.10 版本中,我的数据类型 Bit 列被视为布尔值,但在 3.2.0 版本中,我的数据类型 Bit 列被视为 BitArray。因此,会出现此问题)

请为我提供任何解决方案以在最新的 Npgsql 版本中解决此问题。

标签: c#postgresqlado.netnpgsql

解决方案


推荐阅读