What prefix should I use for MySql parameters with a name in C # using Connector / Net?

I have been using Connector / Net 6.8.3 for a C # project and have been using it (or previous versions) for quite some time.

When I look at legacy code, I see several options related to parameterized queries, and try to determine what the differences are, and if there is best practice.

Query String:

  • Example 1: cmd.CommandText = "UPDATE table SET thing = @value;";

  • Example 2: cmd.CommandText = "UPDATE table SET thing = ?value;";

Adding parameters:

  • Example 3: cmd.Parameters.AddWithValue("@value", user_value);

  • Example 4: cmd.Parameters.AddWithValue("?value", user_value);

  • Example 5: cmd.Parameters.AddWithValue("value", user_value);

All of these options seem to work. I could not find in the official documentation everything that explains the difference in the use of the prefix ( @vs ?). However, this devart.com page offers the following:

  • Without parameters, you can specify "?" symbol.
  • ':' '@', . , MySqlParameter "@", CommandText "@". CommandText ':', MySqlParameter .

, , '@' cmd.Parameters.AddWithValue("@value", user_value); '@', ':.

, , "@" ( 1), AddWithValue() ( 5).

:

  • ? ( 5)

  • '?', ? ( 2)

+3
1

:

5 . :

cmd.CommandText = "UPDATE table SET thing = :value;";
cmd.Parameters.AddWithValue("value", user_value);

:

cmd.CommandText = "UPDATE table SET thing = @value;";
cmd.Parameters.AddWithValue("@value", user_value);

, "@" . , . , .

.

cmd.CommandText = "UPDATE table SET thing = ?;";
cmd.Parameters.AddWithValue("anyname", user_value);

, , , .

, , , :

cmd.CommandText = "UPDATE table SET thing1 = ?, thing2 = ?;";
cmd.Parameters.AddWithValue("anyname1", user_value2);
cmd.Parameters.AddWithValue("anyname2", user_value1);

"user_value2", "thing2", "thing1", .

enter image description here

+4

All Articles