मैं कुछ वर्षों से 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

समस्या यह है कि इसने काम करना बंद कर दिया है!

ऐसा लगता है कि कनेक्टर ठीक काम कर रहा है क्योंकि मैं टेबल छोड़ सकता हूं और उन्हें बना सकता हूं, लेकिन यह मुझे MySQL टेबल में डेटाटेबल 'डीटी' की सामग्री को थोक में डालने नहीं देगा।

यह एक अपवाद नहीं फेंकता है, यह सिर्फ .update(dt) लाइन के ऊपर से गुजरता है जैसे कि यह एक Debug.Print () लाइन थी जब dt में 1000s पंक्तियाँ होती हैं।

प्रभावी रूप से मैं MS SQLserver में तालिकाओं से चुनिंदा रूप से डेटा निकाल रहा हूं और उन्हें MySQL में समान नाम के साथ तालिकाओं पर अपलोड कर रहा हूं।

ए) क्या यह करने का यह सबसे अच्छा तरीका है, और बी) इसने अचानक काम करना क्यों बंद कर दिया है?

PhpMyAdmin के अनुसार इसका सर्वर संस्करण: 5.6.51 - MySQL कम्युनिटी सर्वर (GPL)

संपादित करें: आगे की जानकारी ... मौजूदा टेबल को छोड़ने और टेबल बनाने के लिए सभी एसक्यूएल कमांड काम करते हैं। यह केवल .update(dt) है जो काम नहीं करता है।

0
Tym 5 अगस्त 2021, 17:20

3 जवाब

सबसे बढ़िया उत्तर

अभी भी बल्क अपलोड को काम पर नहीं लाया जा सकता है, लेकिन हमने इसे फिर से डिज़ाइन किया है ताकि डेटा उसी समय MySQL में डाला जा सके जब हम इसे MS-SQL डेटाबेस में स्टोर करते हैं और बल्क अपलोड की आवश्यकता को हटा दिया है।

0
Tym 27 अगस्त 2021, 12:09

आपके कोड के साथ संभावित समस्याएं यह हो सकती हैं कि स्कीमा बिल्कुल मेल नहीं खाते, ऑटो इंक्रीमेंट कॉलम, या कनेक्शन कहीं और निपटाया जा सकता था (इसे उस विधि के लिए स्थानीय घोषित किया जाना चाहिए जहां इसका उपयोग किया जाता है)। एक और समस्या यह है कि 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
0
Tym 7 अगस्त 2021, 06:51

शायद आपके पास "0000-00-00" है? यदि ऐसा है, तो एक सेटिंग ने डिफ़ॉल्ट बदल दिया है - MySQL के नए संस्करण शून्य तिथियों की अनुमति नहीं देते हैं। sql_modes के बारे में पढ़ें।

0
Rick James 17 अगस्त 2021, 22:00