移动数据库和驱动程序后无法启用约束错误

时间:2013-01-25 23:39:02

标签: mysql database text sqldatatypes

我正在将一个相当大的系统移动到新的服务器和新的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,在phpMyAdmin的查询中运行LENGTH(report)(报告是字段名称)(将很乐意显示所有行)同意,它显示长度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

(之前我使用的是OdBcCommandOdBcConnection,这一切都有效!)

我不知道从这里开始,没有过滤我不想要做的所有数据,删除所有长字段我不确定如何解决这个问题?

任何建议都非常感谢!

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

更新以防任何人从接受的答案中获得帮助(非常感谢):

更改我的代码:

    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))

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

1 个答案:

答案 0 :(得分:0)

我找到的解决方案很少。

  • 清除数据集/ DataTable并重新绑定绑定。继续阅读here

  • 要么不调用FillSchema,要么禁止对Datatable进行约束检查。继续阅读here

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

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

    继续阅读here