かなり大規模なシステムを新しいサーバーと新しいMySQLデータベースに移動しています。
システムは、ODBCデータドライバーを使用してMySQLで数年間実行されていましたが、現在MySQLドライバーを使用していて、問題が発生し始めています。
Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
少しグーグルすると、この記事にたどり着きました。
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
(以前はとを使用OdBcCommand
し OdBcConnection
ていましたが、すべて機能しました!)
やりたくないすべてのデータをフィルタリングし、すべての長いフィールドを削除せずに、ここからどこに進むべきかわからないので、この問題を修正する方法がわかりませんか?
どんなアドバイスも大歓迎です!
============
場合によっては、受け入れられた回答から他の人を助けます(ありがとうございました):
コードを変更する:
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))
この問題を削除しました。長いフィールドが正常に機能するようになりました。