Вы не используете параметры. Вы просто вставляете переменные в строку.
В своих значениях вы фактически вставляете их как varchar, поскольку вы строите запрос через
... '" + prod.Price + "' ...
, что приводит к фактическому строка запроса должна стать
Values('ProductA', '100.1', 'https://productA.com')
Итак, SQL Сервер теперь пытается преобразовать эти значения за вас, преобразовывая varchar в float. Что он должен делать.
Вы получаете ошибку, что он не может этого сделать. Я заметил, что вы также вставляете prod.Price вместо переменной var Price. Вы уверены, что prod.Price правильно отформатирован?
Потому что здесь на экране показано, что цена var должна работать из-за автоматического преобразования. Я предполагаю, что prod.Price, возможно, является десятичным разделителем запятой, а не точкой. Это приведет к тому, что SQL Server выдаст ошибку.
SQL Пример на стороне сервера, демонстрирующий ошибку:
DECLARE @floatVariable FLOAT = 100.1
/* Proper float value, so no problems */
SELECT @floatVariable
DECLARE @floatVariable2 FLOAT = '100.1'
/* A valid float, but as varchar so autocasted */
SELECT @floatVariable2
DECLARE @floatVariable3 FLOAT = '100,1'
/* A varchar with improper float values, autocasted but doesn't succeed */
SELECT @floatVariable3
Или просто используйте правильную SQL параметризацию для ваших запросов. Вместо того, чтобы объединять все вместе в одну строку (всегда интересно получить SQL, введенное таким образом).
Изменить:
Итак, протестировав преобразование в приложении. В простом консольном приложении C# с языковым стандартом / культурой, в которых в качестве условного обозначения используются десятичные дроби, разделенные запятыми, при «добавлении» его в строку двойное значение автоматически преобразуется в запятую.
Пример кода:
static void Main(string[] args)
{
double a = 10.1;
Console.WriteLine(@"Double value: " + a + " .");
Console.ReadLine();
}
Выходное значение:
Двойное значение: 10,1.