在 C# 中将数据加载到 DataTable 会出现“未知 SQL 类型 - 0”错误

Posted

技术标签:

【中文标题】在 C# 中将数据加载到 DataTable 会出现“未知 SQL 类型 - 0”错误【英文标题】:Loading data to DataTable in C# gives "Unknown SQL type - 0" error 【发布时间】: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

【问题讨论】:

您的代码是否受到此错误的影响:bugs.mysql.com/bug.php?id=12514 How to convert json into datatable?的可能重复 @MoStar 不是重复的,我已经编辑了问题以更好地解释它 您应该提供您正在使用的 MySQL 数据库和 MySQL 连接器/ODBC 的版本。您是否也会在您的问题中添加此信息? 我的建议来自此链接:forums.mysql.com/read.php?37,650722,651027#msg-651027 - 我在Release Notes 中找不到对 JSON 数据类型的任何引用。我不知道是否可以修改查询以将列转换为 char/varchar - 如果是这样,这可能是您的解决方法。 【参考方案1】:

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

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

【讨论】:

谢谢,接受这一点,因为是您为我指明了正确的方向,如果有人需要完整的解决方案,我已将其发布在这里:***.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

【讨论】:

以上是关于在 C# 中将数据加载到 DataTable 会出现“未知 SQL 类型 - 0”错误的主要内容,如果未能解决你的问题,请参考以下文章

C# 在 .NET 1.1 中将 DataView 转换为表(DataTable)

在 C# 中将 DataTable 转换为 SQL 的 CREATE TABLE + INSERT 脚本

在 C# 中将数据表转换为 JSON

如何在.net 2.0中将数据从数据库或DataTable保存到Excel文件而没有响应

如何在c#中将数据表绑定到datagridview

如何在 C# 中将数据集加载到 libsvm 中