首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB.Net MySQL连接器。大容量插入已停止工作

问VB.Net MySQL连接器。大容量插入已停止工作
EN

Stack Overflow用户
提问于 2021-08-05 14:20:39
回答 3查看 220关注 0票数 0

几年来,我一直在使用下面的代码来填充MySQL数据库中的表,并且一直运行良好。

代码语言:javascript
复制
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)不起作用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-27 12:09:37

仍然不能批量上传,但我们已经重新设计了这个功能,以便在将数据存储在MS- MySQL数据库中的同时将数据插入到SQL中,并消除了批量上传的需要。

票数 0
EN

Stack Overflow用户

发布于 2021-08-05 18:50:02

您的代码可能存在的问题可能是模式不完全匹配,自动增量列,或者连接可能已经放置在其他地方(它应该被声明为使用它的方法的本地)。另一个问题是dt调用了AcceptChanges,或者LoadOptions设置不正确。

代码语言:javascript
复制
    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
票数 0
EN

Stack Overflow用户

发布于 2021-08-17 22:00:21

也许你有"0000-00-00"?如果是这样,则说明某个设置已经更改了默认值--新版本的MySQL不允许零日期。阅读有关sql_modes的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68668372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档