2

我正在将一个相当大的系统转移到一个新的服务器和新的 MySQL 数据库上。

该系统已经使用 ODBC 数据驱动程序在 MySQL 上运行了几年,我现在使用 MySQL 驱动程序并开始遇到问题。

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

一些谷歌搜索把我带到了这篇文章:

http://weblogs.asp.net/rosherove/archive/2004/10/03/DataSet-hell-2D00-_2200_Failed-to-enable-constraints.-One-or-more-rows--contain-values_2E002E002E002E002200_.aspx _ _

在阅读了包括 MySQL 文档在内的其他一些文档后,我发现问题在于text我的数据库中的某些字段具有相当大的内容。

我将问题的一个实例追溯到单独的记录,修改了其中一个text字段中的数据,使其更短并且消除了问题。

将内容放入 MS Word 后,字符数为 30,000,LENGTH(report)在 phpMyAdmin 上的 Query 中运行(报告是字段名称)(它会愉快地显示所有行)同意,它显示长度为 33108

所以,这一定是问题所在,但我肯定可以处理这种数据吗?

我不确定问题出在哪里,是新的数据库设置,还是 MySQL 驱动程序的使用?

我正在尝试DataTable按如下方式使用数据:

Public Shared Function getTable() as DataTable
    Dim connection As MySqlConnection = Common.getConnection()        
    connection.Open()
    Dim connect As MySqlCommand = Common.createCommand(sql, connection)
    Dim getData As New DataTable()
    getData.Load(connect.ExecuteReader(CommandBehavior.CloseConnection))
    return getData
End Function

Public Shared Function getConnection() As MySqlConnection
    Dim DBConnection As String
    DBConnection = ConfigurationManager.ConnectionStrings("dbConn").ConnectionString
    Dim oConnection As MySqlConnection = New MySqlConnection(DBConnection) 
    getConnection = New MySqlConnection(DBConnection)
End Function

Public Shared Function createCommand(sql As String, connection As MySqlConnection) As MySqlCommand
    createCommand = New MySqlCommand(sql, connection)
End Function

(以前我使用OdBcCommandand OdBcConnections 并且一切正常!)

我不确定从这里去哪里,没有过滤我不想做的所有数据,并删除所有长字段我不确定如何解决这个问题?

非常感谢任何建议!

=============

更新以防万一,从接受的答案(非常感谢):

更改我的代码:

    Dim getData As New DataTable()
    getData.Load(connect.ExecuteReader(CommandBehavior.CloseConnection))

至:

    Dim dataset As New DataSet()
    Dim getData As New DataTable()
    dataset.Tables.Add(getData)
    getData.DataSet.EnforceConstraints = False
    getData.Load(connect.ExecuteReader(CommandBehavior.CloseConnection))

删除了这个问题,现在长字段工作正常。

4

1 回答 1

0

我找到的解决方案很少。

  • 清除 Dataset / DataTable 并重新绑定绑定。在这里继续阅读。

  • 要么不调用 FillSchema,要么禁用对 Datatable 的约束检查。在这里继续阅读。

  • 将 EnforceConstraints 设置为 false 并在此之后加载数据。

    Dim getData As New DataTable()
    getData.DataSet.EnforceConstraints = false;
    getData.Load(connect.ExecuteReader(CommandBehavior.CloseConnection))
    return getData
    

    在这里继续阅读。

于 2013-01-26T06:33:52.867 回答