Каково правильное место метода Prepare ()?До определения параметров (с их типами и размерами) или после? - PullRequest
0 голосов
/ 18 февраля 2019

Я нашел два разных описания того, когда следует использовать метод 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?

...