MS Access / OleDB: не указано значение для одного или нескольких обязательных параметров <- Как отлаживать? - PullRequest
0 голосов
/ 26 мая 2020

Это, наверное, худшее сообщение об ошибке, которое я когда-либо видел в любом контексте. Исходя из SQL сервера и теперь обновляя устаревшую базу данных Access, эта ошибка продолжает появляться снова и снова, и каждый раз это полный метод проб и ошибок, который тратит огромное количество времени.

Любые полезные советы о том, как эффективно отладить эту ошибку? Хотелось бы дать хоть малейший намек на то, где искать? Я использую C#.

Ответы [ 2 ]

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

Ну, если использовать, скажем, сервер sql, можно запустить SQL studio и попробовать sql таким образом.

И тот же подход работает для Access. Возьмите свой sql (отладка. Распечатайте его), а затем вырежьте + вставьте sql в построитель запросов доступа (в режиме просмотра sql). Если вы запустите запрос, то для любого отсутствующего поля он выдаст подсказку с «именем» столбца.

Access использует (когда из Access) систему подсказок для любого столбца, которого нет в таблица, и автоматически c запрашивает у пользователя значение. Если вы используете odb c или oleDB, то отсутствующие столбцы выводят этот недостающий параметр (но без имени столбца, как вы заметили).

Итак, проще всего запустить доступ и использовать sql просмотреть в построителе запросов - вставьте sql.

0 голосов
/ 26 мая 2020

Вы можете использовать ADO для создания запроса, а затем перечислить все параметры, которые ожидает запрос:

ADODB.Connection conn = new ADODB.Connection();
conn.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Path\\To\\db.accdb");
ADODB.Command cmd = new ADODB.Command
{
    CommandText = "SELECT * FROM tblUsers WHERE username = bob", 
    //Oops, forgot to quote the username, results in No value given for parameter error
    ActiveConnection = conn
};
foreach(ADODB.Parameter param in cmd.Parameters)
{
    Console.WriteLine(param.Name); //bob
}
Console.ReadLine();

Для этого требуется ссылка на ADO, которую можно ввести через ссылки COM.

Вы также можете использовать позднее связывание для предотвращения дополнительной ссылки, что может быть желательно, если вы используете его только как отладочный код, но хотите, чтобы он был в вашем проекте, см. этот Q & A .

Поскольку OLEDB не поддерживает именованные параметры, вы, к сожалению, не можете использовать OLEDB для этого afaik.

Конечно, вы можете переписать это в функцию, которая принимает строку запроса и возвращает ожидаемые параметры в виде строки, а затем используйте эту функцию в непосредственном окне при отладке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...