Click here to Skip to main content
15,867,834 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more: , +
Hi ....

Iam tring to insert data to database table but i need it check befor insert if the inserted data is Exists in database table iam getting this error :

CS0120 An object reference is required for the non-static field, method, or property 'ManageVisitsTypesService.InsertVisitsTypes(int, string, bool, string, int)'

I sure this Method is not Static.


What I have tried:

First i have Stored Procedure:

SQL
Create procedure [dbo].[Save_Visits_Types]

	@VisitTypeID int output,
	@VisitTypeName nvarchar (Max),
	@VisitTypeStatus bit,
	@VisitTypeNotes nvarchar (Max),
	@CreatedBy int
	

As
BEGIN
    SET NOCOUNT ON;
    
    If Exists(SELECT 1 FROM dbo.VisitsTypesTbl WHERE VisitTypeID = @VisitTypeID)
    BEGIN
        Return -3;
    END;
    If Exists(SELECT 1 FROM dbo.VisitsTypesTbl WHERE VisitTypeName = @VisitTypeName)
    BEGIN
        Return -4;
    END;
    
    INSERT INTO dbo.VisitsTypesTbl (VisitTypeID, VisitTypeName, VisitTypeStatus, VisitTypeNotes, CreatedDate, CreatedDeviceName)
    VALUES (@VisitTypeID, @VisitTypeName, @VisitTypeStatus, @VisitTypeNotes, getdate(), HOST_NAME());
    
    Return -2;
			
END



Then i have Data Access Layer Which i named DBHelper :

C#
//Method To Insert , Update And Delete From Database
        public static bool ExcuteData(string SpName, Action method)
        {
            using (SqlConnection connection = GetConnectionString())
            {
                try
                {
                    command = new SqlCommand(SpName, connection);
                    command.CommandType = CommandType.StoredProcedure;
                    method.Invoke();
                    connection.Open();
                    command.ExecuteNonQuery();
                    connection.Close();
                    return true;
                }
                catch (Exception ex)
                {
                    connection.Close();
                    Console.WriteLine(ex.Message);
                    return false;
                }
                finally
                {
                    connection.Close();
                }
            }
        }



Then i have Created Model Class Which contain :


C#
namespace Team_Manager.Models
{
    public class ManageVisitsTypesModel
    {
        public int VisitTypeID { get; set; }
        public string VisitTypeName { get; set; }
        public bool VisitTypeStatus { get; set; }
        public string VisitTypeNotes { get; set; }
        public int CreatedBy { get; set; }

    }
}




Then i have created the Service Class which contain the insert Method :

C#
//This Method For Insert Paramerters For Visits Types To Database
        public SaveResult InsertVisitsTypesParamerter(int VisitTypeID, string VisitTypeName, bool VisitTypeStatus, string VisitTypeNotes, int CreatedBy, SqlCommand command)
        {
            var pReturnValue = new SqlParameter("@ReturnValue", SqlDbType.Int) { Direction = ParameterDirection.ReturnValue };
            command.Parameters.Add("@VisitTypeID", SqlDbType.Int).Value = VisitTypeID;
            command.Parameters.Add("@VisitTypeName", SqlDbType.NVarChar).Value = VisitTypeName;
            command.Parameters.Add("@VisitTypeStatus", SqlDbType.Bit).Value = VisitTypeStatus;
            command.Parameters.Add("@VisitTypeNotes", SqlDbType.NVarChar).Value = VisitTypeNotes;
            command.Parameters.Add("@CreatedBy", SqlDbType.Int).Value = CreatedBy;
            switch ((int)pReturnValue.Value)
            {
                case -2: return SaveResult.Ok;
                case -3: return SaveResult.DuplicateId;
                case -4: return SaveResult.DuplicateName;
                default: return SaveResult.UnknownError;
            }
        }

        //This Method For Insert Visits Types To Database
        public bool InsertVisitsTypes(int VisitTypeID, string VisitTypeName, bool VisitTypeStatus, string VisitTypeNotes, int CreatedBy)
        {
            return ExcuteData("Save_Visits_Types", () => InsertVisitsTypesParamerter(VisitTypeID, VisitTypeName, VisitTypeStatus, VisitTypeNotes, CreatedBy, command));
        }



And Presenter Class :

C#
class ManageVisitsTypesPresenter
    {
        IManageVisitsTypes iManageVisitsTypes;
        ManageVisitsTypesModel ManageVisitsTypesModel = new ManageVisitsTypesModel();

        public ManageVisitsTypesPresenter(IManageVisitsTypes view)
        {
            iManageVisitsTypes = view;
        }

        // Connect Between Model And Interface
        private void ConnectManageVisitsTypesModelAndInterface()
        {
            ManageVisitsTypesModel.VisitTypeID = iManageVisitsTypes.VisitTypeID;
            ManageVisitsTypesModel.VisitTypeName = iManageVisitsTypes.VisitTypeName;
            ManageVisitsTypesModel.VisitTypeStatus = iManageVisitsTypes.VisitTypeStatus;
            ManageVisitsTypesModel.VisitTypeNotes = iManageVisitsTypes.VisitTypeNotes;
            ManageVisitsTypesModel.CreatedBy = iManageVisitsTypes.CreatedBy;
        }

        // Insert Visits Types 
        public void VisitsTypesInsert()
        {
            if (iManageVisitsTypes.VisitTypeName == "")
            {
                iManageVisitsTypes.TheError.SetError(iManageVisitsTypes.TheStatus, "Please Type Visit Type");
                return;
            }
            SaveResult saveResult = ManageVisitsTypesService.InsertVisitsTypes(ManageVisitsTypesModel.VisitTypeID, ManageVisitsTypesModel.VisitTypeName, ManageVisitsTypesModel.VisitTypeStatus, ManageVisitsTypesModel.VisitTypeNotes, ManageVisitsTypesModel.CreatedBy);
            if (saveResult == SaveResult.DuplicateId)
            {
                MessageBox.Show("This ID Type Allready Exists");
            }
            else if (saveResult == SaveResult.DuplicateName)
            {
                MessageBox.Show("This Type Name Allready Exists");
            }
            else
            {
                ConnectManageVisitsTypesModelAndInterface();
                GetActiveVisitsTypes();
                AutoNumber();
                XtraMessageBox.Show(DevExpress.LookAndFeel.UserLookAndFeel.Default, "Visit Type Saved Successflly ...", "Add Visit Type", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Posted
Updated 19-Dec-20 4:50am
Comments
Richard MacCutchan 19-Dec-20 10:12am    
The message is clear, you cannot call a non-static method without an object reference. So it should be something like:
serviceRef.InsertVisitsTypes(...);

where serviceRef is an instantiation of the class (the service class) that contains this method.
khalid4775 19-Dec-20 10:23am    
yes i have tried that like so :

ManageVisitsTypesService.InsertVisitsTypes(ManageVisitsTypesModel.VisitTypeID, ManageVisitsTypesModel.VisitTypeName, ManageVisitsTypesModel.VisitTypeStatus, ManageVisitsTypesModel.VisitTypeNotes, ManageVisitsTypesModel.CreatedBy);


but its getting the same error
Richard MacCutchan 19-Dec-20 11:49am    
But ManageVisitsTypesService is not an object reference, it is the name of your class.
khalid4775 19-Dec-20 12:18pm    
i have been created the object but iam getting the error below

CS0161 'ManageVisitsTypesService.InsertVisitsTypes(int, string, bool, string, int)': not all code paths return a value
Richard MacCutchan 19-Dec-20 12:39pm    
Sorry, But I cannot see why that error should occur in that method. But then I am far from being an MVP expert.

1 solution

Just make InsertVisitsTypesParamerter static; it has no "non-local" references:

public static SaveResult InsertVisitsTypesParamerter( etc.

(Your response to Richard was a non-answer; a repeat of the problem)
 
Share this answer
 
Comments
khalid4775 19-Dec-20 11:08am    
Yes that what i did but its not inserting the data to database

Cannot implicitly convert type 'bool' to 'DBHelper.SaveResult'

In DBHelper.SaveResult contain this

public enum SaveResult
{
Ok,
DuplicateId,
DuplicateName,
UnknownError,
}
khalid4775 20-Dec-20 8:31am    
Any Others would like to help ??

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900