簡體   English   中英

具有Wcf服務的Windows窗體應用程序中的不可引用成員

[英]Non Invocable Member in windows Form Application With Wcf Service

我正在Windows窗體應用程序中使用WCF服務。 我的WCF服務有兩個類,分別是FulltimeEmployeeParttimeEmployee 我想通過將Wcf Service與基於員工類型的Windows Fomr應用程序一起使用來將用戶注冊到Sql數據庫中。 用戶類型將來自emu類型,但我無法編譯它並顯示以下錯誤...

Non-invocable member 'EmployeeType.FullTimeEmployee' cannot be used like a method.  HalifaxWindowsFormsApplication  C:\Users\Khundokar Nirjor\Documents\Visual Studio 2015\Projects\HalifaxWindowsFormsApplication\HalifaxWindowsFormsApplication\ADDEMPLOYEE.cs    38  Active

如屏幕截圖所示。

這是全職和兼職員工類的代碼。

[DataContract]
public class FullTimeEmployee : Employee
{
    public int AnnualSalary { get; set; }
}

[DataContract]
public class PartTimeEmployee : Employee
{
    public int HourlyPay { get; set; }
    public int HoursWorked { get; set; }
}

這是代碼表單類。

 [KnownType(typeof(FullTimeEmployee))]
    [KnownType(typeof(PartTimeEmployee))]
    [DataContract(Namespace = "http://pragimtech.com/Employee")]
    public class Employee
    {
        private int _id;
        private string _name;
        private string _gender;
        private DateTime _dateOfBirth;

        [DataMember(Order = 1)]
        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        [DataMember(Order = 2)]
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        [DataMember(Order = 3)]
        public string Gender
        {
            get { return _gender; }
            set { _gender = value; }
        }

        [DataMember(Order = 4)]
        public DateTime DateOfBirth
        {
            get { return _dateOfBirth; }
            set { _dateOfBirth = value; }
        }

        [DataMember(Order = 5)]
        public EmployeeType Type { get; set; }
    }

    public enum EmployeeType
    {
        FullTimeEmployee = 1,
        PartTimeEmployee = 2
    }
}

這是WCF服務代碼,用於根據類型注冊員工:

public void SaveEmployee(Employee employee)
{
    string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

    using (SqlConnection con = new SqlConnection(cs))
    {
        SqlCommand cmd = new SqlCommand("spSaveEmployee", con);
        cmd.CommandType = CommandType.StoredProcedure;

        SqlParameter parameterId = new SqlParameter
                {
                    ParameterName = "@Id",
                    Value = employee.Id
                };
        cmd.Parameters.Add(parameterId);

        SqlParameter parameterName = new SqlParameter
                {
                    ParameterName = "@Name",
                    Value = employee.Name
                };
        cmd.Parameters.Add(parameterName);

        SqlParameter parameterGender = new SqlParameter
                {
                    ParameterName = "@Gender",
                    Value = employee.Gender
                };
        cmd.Parameters.Add(parameterGender);

        SqlParameter parameterDateOfBirth = new SqlParameter
                {
                    ParameterName = "@DateOfBirth",
                    Value = employee.DateOfBirth
                };
        cmd.Parameters.Add(parameterDateOfBirth);

        SqlParameter parameterEmployeeType = new SqlParameter
                {
                    ParameterName = "@EmployeeType",
                    Value = employee.Type
                };
        cmd.Parameters.Add(parameterEmployeeType);

        if (employee.GetType() == typeof(FullTimeEmployee))
        {
            SqlParameter parameterAnnualSalary = new SqlParameter
                    {
                        ParameterName = "@AnnualSalary",
                        Value = ((FullTimeEmployee)employee).AnnualSalary
                    };
            cmd.Parameters.Add(parameterAnnualSalary);
        }
        else
        {
            SqlParameter parameterHourlyPay = new SqlParameter
                    {
                        ParameterName = "@HourlyPay",
                        Value = ((PartTimeEmployee)employee).HourlyPay,
                    };
            cmd.Parameters.Add(parameterHourlyPay);

            SqlParameter parameterHoursWorked = new SqlParameter
                    {
                        ParameterName = "@HoursWorked",
                        Value = ((PartTimeEmployee)employee).HoursWorked
                    };
            cmd.Parameters.Add(parameterHoursWorked);
        }

        con.Open();
        cmd.ExecuteNonQuery();
    }
}

這是Windows Form應用程序代碼:

private void button1_Click(object sender, EventArgs e)
{
    MyService.HalifaxServiceClient myservice = new MyService.HalifaxServiceClient("NetTcpBinding_IHalifaxService");

    MyService.Employee employee = null;

    if (((MyService.EmployeeType)Convert.ToInt32(comboBox2.SelectedValue)) == MyService.EmployeeType.FullTimeEmployee)
    {
        employee = new MyService.FullTimeEmployee
                   {
                      Id = Convert.ToInt32(textBox1.Text),
                      Name = txtName.Text,
                      Gender = comboBox1.Text,
                      DateOfBirth = Convert.ToDateTime(txtDateOfBirth.Text),
                      Type = MyService.EmployeeType.FullTimeEmployee(comboBox2.SelectedValue),//Error
                      AnnualSalary = Convert.ToInt32(txtAnnualSalary.Text),
                   };
        myservice.SaveEmployee(employee);
        label8.Text = "Employee saved";
    }
    else if (((MyService.EmployeeType)Convert.ToInt32(comboBox2.SelectedValue)) == MyService.EmployeeType.PartTimeEmployee)
    {
        employee = new MyService.PartTimeEmployee
                       {
                           Id = Convert.ToInt32(textBox1.Text),
                           Name = txtName.Text,
                           Gender = comboBox1.Text,
                           DateOfBirth = Convert.ToDateTime(txtDateOfBirth.Text),
                           Type = MyService.EmployeeType.PartTimeEmployee(comboBox2.SelectedValue),//Error
                           HourlyPay = Convert.ToInt32(txtHourlyPay.Text),
                           HoursWorked = Convert.ToInt32(txtHoursWorked.Text),
                       };
        myservice.SaveEmployee(employee);
        label8.Text = "Employee saved";
    }
    else
    {
       label8.Text = "Please select Employee Type";
    }
}

private void button2_Click(object sender, EventArgs e)
{
    this.Close();
}

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
    if (comboBox2.Text == "FullTimeEmployee")
    {
        txtHourlyPay.Visible = false;
        txtHoursWorked.Visible = false;
        label6.Visible = false;
        label7.Visible = false;
    }
    else if (comboBox2.Text == "PartTimeEmployee")
    {
        txtHourlyPay.Visible = true;
        txtHoursWorked.Visible = true;
        label6.Visible = true;
        label7.Visible = true;
    }
}

當我單擊提交按鈕時,它顯示錯誤消息

並且不會在SQL Server數據庫中插入新員工。

這是輸出的屏幕截圖:

點擊這里查看輸出

請幫助我糾正此錯誤...

您需要使用[DataContract]屬性標記枚舉,並使用[EnumMember]屬性標記每個枚舉值。 我還注意到,您在Employee數據合同上擁有的枚舉成員是已知類型,而不是枚舉本身。

[DataContract]
public class Car
{
    [DataMember]
    public string model;
    [DataMember]
    public CarConditionEnum condition;
}

[DataContract(Name = "CarCondition")]
public enum CarConditionEnum
{
    [EnumMember]
    New,
    [EnumMember]
    Used,
    [EnumMember]
    Rental,
    Broken,
    Stolen
}

有關更多信息,請查看此鏈接

編輯: 是您要尋找的。 您應該嘗試類似的方法:

Type = (MyService.EmployeeType) Enum.Parse(typeof(MyService.EmployeeType), comboBox2.SelectedText);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM