【问题标题】:Loading data to DataTable in C# gives "Unknown SQL type - 0" error在 C# 中将数据加载到 DataTable 会出现“未知 SQL 类型 - 0”错误
【发布时间】:2018-11-28 14:28:38
【问题描述】:

我已经成功地使用以下代码将数据从 ODBC 连接加载到 C# DataTable 一段时间没有问题:

public static DataTable ExecuteSqlSelect(string sql, string connectionString)
        {
            var result = new DataTable();
            using (var connection = new OdbcConnection(connectionString))
            {
                connection.Open();

                var command = connection.CreateCommand();
                command.CommandText = sql;
                var dbReader = command.ExecuteReader();
                result.Load(dbReader);

                connection.Close();
            }

            return result;
        }

但是,我现在有一个 MySql 表,其中有一列类型为 JSON。当我尝试使用该方法从该表加载数据时,出现以下错误:

Unknown SQL type - 0.

我认为这是因为 C# 的 DataTable 无法识别 JSON 类型。它是否正确?更重要的是:是否有解决方案/解决方法?

编辑:正如评论者所建议的那样,我 试图将 JSON 字符串转换为 DataTable... 我正在尝试加载包含 列的 SQL 表MySQL 将“JSON” 输入到数据表中。我不需要 JSON 解析,只要将原始 JSON 字符串放入 DataTable 就可以了。

编辑 2:MySql 和 ODBC 连接器都是最新版本:8.0.11

【问题讨论】:

标签: c# mysql datatable


【解决方案1】:

我认为这更多是 ODBC 驱动程序不支持 JSON 数据类型的问题 - 我的建议来自此链接:https://forums.mysql.com/read.php?37,650722,651027#msg-651027 - 我在发行说明中找不到对 JSON 数据类型的任何引用。

您可以尝试将列转换为 char/varchar 作为解决方法。

【讨论】:

  • 谢谢,接受这一点,因为是您为我指明了正确的方向,如果有人需要完整的解决方案,我已将其发布在这里:stackoverflow.com/a/50932457/300741
  • 你打败了我,让我的 cmets 找到了答案——很高兴你发布了更新后的查询并显示了演员表。
【解决方案2】:

感谢 PaulF 在 cmets 中的建议,我能够解决这个问题。由于 ODBC 驱动程序不正确支持 JSON,您必须直接在查询中将列转换为文本。所以如果我之前有:

SELECT col1, col2, jsonCol FROM table;

我将其替换为:

SELECT col1, col2, CAST(jsonCol as CHAR(256)) as jsonCol FROM table;

这会将列转换为普通文本,然后将其正确加载到DataTable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多