Формат массива параметров OleDb - PullRequest
0 голосов
/ 07 мая 2020

Привет, в документации OleDB (ссылка ниже) у них есть параметр с именем OleDbParameter[] parameters в функциях, al oop затем перебирает этот массив, чтобы вставить параметры в SQL.

I не можете найти в документации, как вы должны отформатировать этот массив?

Документы: https://docs.microsoft.com/en-us/dotnet/api/system.data.oledb.oledbcommand.parameters?view=dotnet-plat-ext-3.1

1 Ответ

1 голос
/ 07 мая 2020

Код в примере Microsoft неверен и не компилируется. Я уже отправил отзыв об этом. Вот более правильная версия с аннотациями о том, что нужно изменить.

public void CreateMyOleDbCommand(OleDbConnection connection,
                  string queryString, OleDbParameter[] parameters)
{
    OleDbCommand command = new OleDbCommand(queryString, connection);

    // This destroys the commandtext set by querystring in the constructor.
    // command.CommandText =
    //    "SELECT CustomerID, CompanyName FROM Customers WHERE Country = ? AND City = ?";

    // This cannot work, you can't add an array with Add but only one element
    // command.Parameters.Add(parameters);
    command.Parameters.AddRange(parameters);

    // After AddRange this loop is pointless and creates possible errors with
    // too many parameters added to the collection
    // for (int j=0; j<parameters.Length; j++)
    //{
    //    command.Parameters.Add(parameters[j]) ;
    //}

    string message = "";
    for (int i = 0; i < command.Parameters.Count; i++)
    {
        message += command.Parameters[i].ToString() + "\n";
    }
    Console.WriteLine(message);
}

Теперь для вызова этой функции у вас есть

string cmdText = @"SELECT CustomerID, CompanyName 
                   FROM Customers 
                   WHERE Country = ? AND City = ?";
OleDbParameter[] parameters = new OleDbParameter[]
{
    new OleDbParameter{ ParameterName = "?",OleDbType = OleDbType.VarWChar, Value = "UK" },
    new OleDbParameter{ ParameterName = "?",OleDbType = OleDbType.VarWChar, Value = "London"},
};
CreateMyOleDbCommand(myConnection, cmdText, parameters);
...