Невозможно связать параметр в Insight.Database
Я пытаюсь привязать параметр к запросу SQL в моем хранилище, но у меня ошибка
public IList<Movie> FindMovieById(int movieId)
{
return Database.Connection().QuerySql<Movie>("select * from myDB.movies where ID=?", new { movieId });
}
Я получаю исключение OleDb.
SQL0313: недопустимое количество переменных хоста. Причина,,,,: Количество переменных или записей хоста в области SQLDA или дескриптора, указанных в операторе EXECUTE или OPEN, не совпадает с количеством маркеров параметров, указанных в подготовленном операторе SQL S000001. Если имя оператора *N, число переменных хоста или записей в области SQLDA или дескриптора было указано в операторе OPEN и не совпадает с количеством переменных хоста, указанных в операторе DECLARE CURSOR для курсора C000001. Восстановление,,: Измените число переменных хоста, указанное в предложении USING, или количество записей в области SQLDA или дескриптора, чтобы оно равнялось количеству маркеров параметров в подготовленном операторе SQL или количеству переменных хоста в операторе DECLARE CURSOR. Снова скомпилируйте программу.
Я использовал? для привязки параметров, поскольку OleDb имеет позиционные параметры, которые обозначаются '?'
скорее '@parameterName'
,
Любая помощь приветствуется.
2 ответа
Используя Insight.Database, вы можете попробовать это?
return Database.Connection().QuerySql<Movie>(
"select * from myDB.movies where ID=@movieId",
new { movieId = movieId });
Чтобы Insight отображал запросы на объекты, он привязывает параметры по имени, а не по позиции.
Ваш объект параметра может быть анонимного типа. Если вы укажете:
new { movieId }
Я считаю, что компилятор сгенерирует свойство с именем "MovieID"
В этом случае ваш параметр должен называться @movieId.
Если ваша база данных не поддерживает именованные параметры, пожалуйста, откройте проблему на github, и я могу взглянуть на нее.