【发布时间】:2017-08-24 10:48:02
【问题描述】:
我正在 Windows 窗体应用程序中使用 WCF 服务。我的 WCF 服务有两个类,称为 FulltimeEmployee 和 ParttimeEmployee。我想根据员工类型将 Wcf 服务与 Windows Fomr 应用程序一起使用,将用户注册到 Sql 数据库中。用户类型将来自 emu 类型,但我无法编译它并显示以下错误...
这两行的操作异常无效,它还说通过 ListControl 获取或设置属性成员的值..
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox2.SelectedValue =="-1")//Error in this line
{
txtHourlyPay.Visible = false;
txtHoursWorked.Visible = false;
label6.Visible = false;
label7.Visible = false;
}
else if (comboBox2.SelectedValue =="1")//Error on this line
{
txtHourlyPay.Visible = true;
txtHoursWorked.Visible = true;
label6.Visible = true;
label7.Visible = true;
}
}
这是全职和兼职员工类的代码..
[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 窗体应用程序代码:
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.SelectedValue =="-1")
{
txtHourlyPay.Visible = false;
txtHoursWorked.Visible = false;
label6.Visible = false;
label7.Visible = false;
}
else if (comboBox2.SelectedValue =="1")
{
txtHourlyPay.Visible = true;
txtHoursWorked.Visible = true;
label6.Visible = true;
label7.Visible = true;
}
}
当我点击提交按钮时,它会显示错误消息
并且不会将新员工插入 SQL Server 数据库。..
这是输出截图:
请帮我纠正这个错误...
【问题讨论】:
-
通常,如果您希望得到快速响应,您可以添加赏金,而不是对问题发表评论。但我怀疑你的声望太低了
-
不..我不想在线。无论如何,我正在检查你的答案
标签: c# windows web-services wcf