I’m getting the following Error when trying to use OOP (for the first time), to display a list of products on my aspx page. The ProductService.cs reads the query and parameters from my ProductService.cs file, but unforturnaly there seem to be an issue with this line of code:
ProductService.SaveProduct(id, TxtName.Text, Int32.Parse(DDCategories.SelectedValue), TxtDescription.Text, Decimal.Parse(TxtPrice.Text), Decimal.Parse(TxtUnitDiscount.Text));
Error:
CS0120: An object reference is required for the non-static field,
method, or property ‘ProductService.SaveProduct(int?, string, int,
string, decimal, decimal)’
Aspx.cs:
protected void BtnUpdateOrCreate_Click(object sender, EventArgs e)
{
// Text in fields has to exist, if they are requierd
if (!string.IsNullOrWhiteSpace(TxtName.Text) /*&&
!string.IsNullOrWhiteSpace(TxtDescription.Text)*/)
{
// TODO: Be sure to parse the decimals using TryParse before
int? id = isCreate ? null : (int?)ProductID;
ProductService productService = new ProductService();
ProductService.SaveProduct(id, TxtName.Text, Int32.Parse(DDCategories.SelectedValue), TxtDescription.Text, Decimal.Parse(TxtPrice.Text), Decimal.Parse(TxtUnitDiscount.Text));
// Redirects to list
Response.Redirect(Request.Url.AbsolutePath);
}
ProductService.cs:
public void SaveProduct(int? id, string name, int categoryID, string description, decimal unitPrice, decimal discountUnitPrice)
{
dataAccess.AddParameter("@Name", name);
dataAccess.AddParameter("@Category_ID", categoryID);
dataAccess.AddParameter("@Description", description.ToNewline(false));
dataAccess.AddParameter("@UnitPrice", unitPrice);
dataAccess.AddParameter("@DiscountUnitPrice", discountUnitPrice);
if (!id.HasValue)
{
// Insert query
dataAccess.Execute(@"INSERT INTO [Product] ([Name], [Category_ID], [UnitPrice], [DiscountUnitPrice], [Description])
VALUES (@Name, @Category_ID, @UnitPrice, @DiscountUnitPrice, @Description)");
}
else
{
// Update query
dataAccess.AddParameter("@id", id.Value);
dataAccess.Execute(@"UPDATE [Product]
SET [Name] = @Name, [Category_ID] = @Category_ID, [UnitPrice] = @UnitPrice, [DiscountUnitPrice] = @DiscountUnitPrice, [Description] = @Description
WHERE id = @id");
}
}
I can’t seem to figure out what the issue could be, any response is more than appreciated.
Should be
You are instantiating the class, but afterwards you are not using the instantiated variable, common mistake when starting with a case sensitive language. Note the difference colors in visual studio for different objects.
The alternative would be to change the method: SaveProduct to static, but then all the private variables in the ProductService class that you use in the SaveProduct method will have to be static as well, if you choose this method rather make the whole class static.