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、データベース内の非常に大きなコンテンツを持ついくつかのフィールドに問題があることを特定しました。

問題の1つのインスタンスを個々のレコードまで追跡し、フィールドの1つでデータを修正してtext短くし、問題を削除しました。

コンテンツをMSWordに入力すると、文字数は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))

この問題を削除しました。長いフィールドが正常に機能するようになりました。

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 に答える