在 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 脚本