Parámetros de MySQL C #:? o @

Estoy algo confundido con los parámetros de MySQL.

Las dos partes siguientes de mi código funcionan bien. El primero usa parámetros con@ :

const string query = "UPDATE `items` SET `name` = @name, `price` = @price WHERE `id` = @id";
try
{
    using (MySqlCommand cmd = new MySqlCommand(query, Database.MyConnection))
    {
        cmd.Parameters.AddWithValue("name", name);
        cmd.Parameters.AddWithValue("price", price);
        cmd.Parameters.AddWithValue("id", id);
        cmd.ExecuteNonQuery();
    }
}

Segundo utiliza parámetros con? :

const string query = "UPDATE `items` SET `name` = ?name, `price` = ?price WHERE `id` = ?id";
try
{
    using (MySqlCommand cmd = new MySqlCommand(query, Database.MyConnection))
    {
        cmd.Parameters.AddWithValue("name", name);
        cmd.Parameters.AddWithValue("price", price);
        cmd.Parameters.AddWithValue("id", id);
        cmd.ExecuteNonQuery();
    }
}

Estas respuestas di ambos@ o? trabaja bien. Inclusocmd.Parameters.AddWithValue("@name", name); parece funcionar (note la@ en el nombre).

¿Por qué todos ellos funcionan bien con MySQL?

¿Hay alguna diferencia entre ellos?

¿Cuál es la forma correcta de usar con MySQL?

Gracias por cualquier ayuda que voy a obtener.

Respuestas a la pregunta(3)

Su respuesta a la pregunta