Я нашел два разных описания того, когда следует использовать метод Prepare () для подготовленных операторов SQL.
В документации SqlCommand (https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.prepare?redirectedfrom=MSDN&view=netframework-4.7.2#System_Data_SqlClient_SqlCommand_Prepare)
"Прежде чем вызывать Prepare, укажите тип данных каждого параметра в подготовляемом операторе. Для каждого параметра, имеющего переменную длинутип данных, вы должны установить для свойства Size максимальный необходимый размер. Prepare возвращает ошибку, если эти условия не выполняются. "
В документации MySqlCommand (https://dev.mysql.com/doc/connector-net/en/connector-net-programming-prepared-preparing.html):
"После ввода вашего оператора вызовите метод Prepare объекта MySqlCommand. После подготовки оператора добавьте параметры для каждого из динамических элементов в запросе."
Это тедве документации, исключающие друг друга? Где именно следует использовать Prepare ()? Кажется, более логично использовать Prepare () после определения данных и типа параметров.
var conn = new MySql.Data.MySqlClient.MySqlConnection();
var cmd = new MySql.Data.MySqlClient.MySqlCommand();
conn.ConnectionString = strConnection;
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO myTable VALUES(NULL, @number, @text)";
cmd.Prepare(); // should it be here?
cmd.Parameters.AddWithValue("@number", 1);
cmd.Parameters.AddWithValue("@text", "One");
cmd.Prepare(); // or here?
for (int i=1; i <= 1000; i++)
{
cmd.Parameters["@number"].Value = i;
cmd.Parameters["@text"].Value = "A string value";
cmd.ExecuteNonQuery();
}
Или, может быть, мне не следует сравнивать ихдве документации и для MySqlCommand использовать его в соответствии с Dosc MySql и для SqlCommand использовать его в соответствии с документами Microsoft?