几年来,我一直在使用下面的代码来填充MySQL数据库中的表,并且一直运行良好。
Imports MySql.Data.MySqlClient
Public sub Thing(dt as datatable)
Try
'dt is datatable object populated from MSsqlServer
Dim MySQLcmdSelect As MySqlCommand = New MySqlCommand("Select * From " & tableName) With {
.Connection = MySQLcnn
}
Dim MySQLad As New MySqlDataAdapter(MySQLcmdSelect)
Dim MySQLcmdBuilder As New MySqlCommandBuilder(MySQLad)
Dim MySQLcmd As MySqlCommand = MySQLcmdBuilder.GetInsertCommand()
MySQLcmd.Connection = MySQLcnn
MySQLad.InsertCommand = MySQLcmd
MySQLad.Update(dt)
Catch ex As Exception
Debug.Print(ex.Message)
Console.WriteLine("Error when populating " + tableName + ": " + ex.Message + vbCrLf + ex.InnerException.ToString)
WriteLog(ex.Message)
End Try
End Sub问题是,它已经停止工作了!
连接器似乎工作正常,因为我可以删除表并创建它们,但这不会让我将数据表'dt‘的内容批量插入到MySQL表中。
它不会抛出异常,它只是在.update( dt )行上传递,当dt中有上千行时,就好像它是一个Debug.Print()行一样。
实际上,我是在有选择地从MS SQLserver中的表中提取数据,并将它们批量上传到MySQL中同名的表中。
a)这是最好的方法吗? b)为什么这个突然停止了?
根据phpMyAdmin,its服务器版本: 5.6.51 - MySQL社区服务器(GPL)
编辑:更多信息...删除现有表和创建表的所有SQL命令都有效。只有.update(dt)不起作用。
发布于 2021-08-27 12:09:37
仍然不能批量上传,但我们已经重新设计了这个功能,以便在将数据存储在MS- MySQL数据库中的同时将数据插入到SQL中,并消除了批量上传的需要。
发布于 2021-08-05 18:50:02
您的代码可能存在的问题可能是模式不完全匹配,自动增量列,或者连接可能已经放置在其他地方(它应该被声明为使用它的方法的本地)。另一个问题是dt调用了AcceptChanges,或者LoadOptions设置不正确。
Private ConnStr As String = "Your connection string"
Public Sub Thing(dt As DataTable, tableName As String)
'check the datatable - if it is ok then this check is probably not necessary
Dim changesDT = dt.GetChanges()
If changesDT.Rows.Count < 1 Then
MessageBox.Show("No changes to update")
Exit Sub
End If
Using cn As New MySqlConnection(ConnStr),
MySQLad As New MySqlDataAdapter("Select * From " & tableName, cn)
cn.open() ' added by OP
Dim MySQLcmdBuilder As New MySqlCommandBuilder(MySQLad)
MySQLad.Update(dt)
End Using
End Sub发布于 2021-08-17 22:00:21
也许你有"0000-00-00"?如果是这样,则说明某个设置已经更改了默认值--新版本的MySQL不允许零日期。阅读有关sql_modes的信息。
https://stackoverflow.com/questions/68668372
复制相似问题