列longtext超出MaxLength限制

时间:2014-11-25 18:29:14

标签: c# mysql datatable sqldatareader

如果dt具有longtext列,则在修改datable中的数据时会发生此错误。 首先我加载数​​据表:

 var command = new MySqlCommand(queryTableData, connection);
 DataTable table = new DataTable();

 try
 {
      connection.Open();
      table.Load(command.ExecuteReader());
 }

当我尝试修改任何列数据时:

table.BeginLoadData();
for (var i = 0; i < table.Rows.Count; i++)
{
    table.Rows[i]["columnName"] = value;
}
table.EndLoadData();

它在table.EndLoadData();上失败并显示错误:RowError: "Column 'longtext_val' exceeds the MaxLength limit."它还将MaxLength: 0列的longtext属性设置为0,其他属性具有正常的最大长度。在数据库中,它被设置为'4294967295'。

我可以通过删除约束来避免这种情况:

    using (var reader = command.ExecuteReader())
    {
        DataSet dataSet = new DataSet();
        dataSet.Tables.Add(table);
        dataSet.EnforceConstraints = false;
        table.Load(reader);
    }

最后一个片段来自mysql site

但在我的情况下,它不是一个选项,可以更改此列的最大长度?或者有解决方案吗?

P.S。 MySQL中的DataType如下所示: name:'longtext_val', 默认值:NULL, is_nullable:'是', data_type:'longtext', character_max_length:'4294967295', character_set_name:'utf8', collat​​ion_name:'utf8_general_ci',
column_type:'longtext'

请注意,我事先并不知道架构,此数据库仅用于测试目的。

P.S.S。 我找不到确切的解决方案所以我不得不做一个解决方法。

我想到了两件事: 1.仅选择不是longtext的列 2.处理实际问题 - 更新数据表。

MySQL数据表会抛出基于行的错误,因此如果您的列上有任何错误并且您尝试修改任何其他列 - 您将获得异常。

MsSQL在基于列的基础上引发了异常。因此,如果您尝试修改非错误列,它不会抛出异常。

因此,我得到所有不同的列都有错误,如果我感兴趣的列引发了异常,我会处理:

 var errorColumns = table.GetErrors()
    .SelectMany(row => row.GetColumnsInError()).Distinct().ToList();

if (errorColumns.Any(column => column.ColumnName == columnMeta.ColumnName))
{
    //handle
}

0 个答案:

没有答案