Sandokan
Sandokan

Reputation: 1105

How to pass CommandText to another MySqlCommand?

The title is a bit furviant, I'll try to explain better. So in my application I've two connection string, one for the local database, and another for the web database. This two database must be updated with the same records. Now in my app when I add a record in the local database I execute a function that pass the MySqlCommand object to another function that use another connection string for the web database. In this second function I need to execute the same operation already performed in the local database. Example code:

Function local database

 Dim query = "INSERT INTO text_app (name, last_name)
                                        VALUES(@namep, @last_namep)"

 Dim MySqlCommand = New MySqlCommand(query, dbCon)

 MySqlCommand.Parameters.AddWithValue("@namep", name.Text)
 MySqlCommand.Parameters.AddWithValue("@last_namep", last_name.Text)

 MySqlCommand.ExecuteNonQuery()

 Sync.SyncOut(MySqlCommand) 'Pass the object to another function

Function web database (SyncOut)

Using dbCon As MySqlConnection = establishWebConnection()

        Try
            dbCon.Open()
            Dim MySqlCommand = New MySqlCommand(query_command, dbCon)

            MySqlCommand.ExecuteNonQuery() 

            Return True

        Catch ex As Exception

            MessageBox.Show(ex.Message)

        End Try

    End Using

Now query_command contain the MySqlCommand passed from the local function, dbCon is the new connection object.

When I perform the .ExecuteNonQuery on the SyncOut function I get this error:

Invalid Cast from 'MySqlCommand' type to 'String' type.

What I need is take the .CommandText property contained in the query_command, but I can't access to this property.

What exactly am I doing wrong? How I can achieve this?

Upvotes: 0

Views: 369

Answers (1)

Steve
Steve

Reputation: 216293

The first thing to do is change the name of the variable that represent the MySqlCommand. I can't find any plausible reason to allow a confusion as this to spread along your code. Do not name a variable with the same name of its class even if the language permits, it is very confusing

Dim query = "INSERT INTO text_app (name, last_name)
                        VALUES(@namep, @last_namep)"

Dim cmd = New MySqlCommand(query, dbCon)

and, of course, change every reference to the old name with the new one.

Now in the declaration of SyncOut write

Public Sub SyncOunt(ByVal cmd As MySqlCommand)
   ...
   ' Do not forget to open the connection '
   dbCon.Open()
   Dim aDifferentCommand = cmd.Clone()
   aDifferentCommand.Connection = dbCon  
   ....

Upvotes: 1

Related Questions