You're not using parameters. You're simply inserting variables into a string.
In your values, you're actually inserting it as a varchar, since you build the query through
... '" + prod.Price + "' ...
Which results in the actual query string to become
Values('ProductA', '100.1', 'https://productA.com')
So SQL Server now tries to convert these values for you, by casting the varchar to a float. Which it should still be capable of doing.
The error you're getting is that it can't do that. I notice you're also inserting the prod.Price, instead of the var Price variable. Are you certain prod.Price is properly formatted?
Because what it shows here on the screen is that the var price should work, due to auto casting. My guess could be that prod.Price perhaps is comma seperated decimal instead of point seperated. This would cause SQL Server to throw an error.
SQL Server side example showcasing the error:
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
Or simply use proper SQL Parameterisation for your queries. Instead of concatting everything together in a single string (always fun to get SQL injected like this).
Edit:
So having tested the in application conversion. In a simple C# console application, with a locale/culture that has comma seperated decimals as their convention, a double gets auto casted to comma seperated when 'adding' it to a string.
Example code:
static void Main(string[] args)
{
double a = 10.1;
Console.WriteLine(@"Double value: " + a + " .");
Console.ReadLine();
}
Value Output:
Double value: 10,1 .