我有radiobutton(男性和女性检查)如果我尝试将字符串(Sex)转换为数据库(smallint),我会收到错误的问题
这是我的代码:
public class MakeAppointment
{
private MakeApptEntities newAppointment = new MakeApptEntities();
public void add( string FirstName, string LastName, string Sex) {
tbl_MakeAppointment_MA nAppt = new tbl_MakeAppointment_MA();
tbl_PatientDetails_PD pDetails = new tbl_PatientDetails_PD();
pDetails.PD_FirstName = FirstName;
pDetails.PD_LastName = LastName;
pDetails.PD_Sex = Convert.ToInt16(Sex);
}
答案 0 :(得分:1)
通常对于这样的事情,我喜欢使用enum
,因为EF现在支持枚举。如果您无法更改模型和数据库架构,则可以创建一个可以为您进行转换的扩展方法。尝试这样的事情:
public static class MyExtensions
{
public static Int16 ToDbValue(this string sex)
{
switch (sex.ToLower())
{
case "male":
return 0;
case "female":
return 1;
default:
// throw exception, or return what you want as default
}
}
}
然后,您可以在add
方法中使用它:
pDetails.PD_Sex = sex.ToDbValue();
注意:更改上面switch/case
中的值以对应您使用的值。
确保您的MakeAppointments
课程中可以看到此课程。最简单的方法是将代码放在同一个文件中。如果您认为自己在其他地方使用ToDbValue
方法,请为此类创建一个单独的文件,并确保它与MakeAppointments
位于同一名称空间。
答案 1 :(得分:0)
使用Int16.Parse而不是convert.toInt16:
pDetails.PD_Sex = Int16.Parse(sex);
*使用常量的枚举类型也是一个非常好的主意!
答案 2 :(得分:0)
我确实将数据库中的PD_Sex数据类型从tiny int更改为int,现在可以正常使用Int32.Parse(Sex)非常感谢大家的支持